框架集合概念,分类及应用
来源:互联网 发布:ubuntu jdk路径有空格 编辑:程序博客网 时间:2024/04/27 13:25
集合的基本概念
集合:保存多个其他对象的对象,不能保存简单类型。Collection框架结构如下:
Collection
|--List
|--|--LinkedList
|--|--ArrayList
|--|--Vector
| |--Stack
|--Set
Map
|--HashMap
|--Hashtable
|--WeakHashMap
Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。
Map提供key到value的映射。
List:有序(存放元素的顺序),可重复的集合。
ArrayList:实质就是一个会自动增长的数组。查询效率较高,增删效率比较低,适用于查询比较频繁,增删动作较少的元素管理的集合。加载大批量的数据时,先进性手动扩容(就是调用ensureCapacity(int minCapacity)方法),这样可以提高效率。
LinkedList:底层是用双向循环链表来实现的,查询效率较低,但是增删效率很高,适用于增删动作比较频繁,查询次数较少的元素管理集合。
Set:无序的,不允许有重复元素的集合
HashSet:Object中的hashCode()的方法是所有类都会继承的方法,这个方法会计算出一个hash码值去和数组长度取模,对象的模值相同时才会判断数组中的元素和要加入的对象的内容是否相同,如果不同才回再找位置添加进去,相同则不允许添加。如果数组中的元素和要加入的对象的hashCode()返回了相同的hash码,才会用equals方法判断两个对象的内容是否相同。
注意:要存入hashset的集合对象中自定义类必须覆盖hashCode(), equals()两个方法,才能保证元素集合中元素不重复。
TreeSet:可排序的Set。SortedSet接口是Set的子接口,TreeSet是SortedSet接口的实现类,他可以对集合中的元素进行排序。将自定义的对象放入TreeSet中,这个类需要实现Comparable接口,TreeSet可以自动过滤掉重复元素,所以不需要重载hashCode()方法,TreeSet会根据比较规则判断元素内容是否相同,不同则会存入,TreeSet会在元素存入时就进行排序。
map:存放key-value对(有关系的两个对象,一个当key一个当value,同时存入)。
HashMap:基于哈希表的Map接口实现,此实现提供所有可选的映射操作,并允许使用null键和null值。
遍历
先用keySet()得到key的set集合,在迭代遍历key的set集合根据key得到value。
Hashtable:同HashMap。
HashMap和Hashtable的区别
HashMap:JDK1.2之后推出,是新的类。才用异步处理方式,性能较高,但是属于非线程安全。允许设置null.
Hashtable:JDK1.0时推出,是旧的类。才用同步处理方式,性能较低,但是属于非线程安全。不允许设置null.
二者最大的不同是,Hashtable的方法是Synchronize的而HashMap不是,在多线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap就必须为之提供外同步。
SortedMap接口:Map的子接口,按某一特定排序规则来存放所加入的键值对。实现类有TreeMap类。Key值的排序规则,同SortedSet接口实现类TreeSet。
注意:key一般是8种基本类型的封装类或是String类,拿自己定义的类作为key没有意义,key不可重复,value可以重复。
ArrayList和Vector的区别
这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素位置都是有顺序的,相当于一种动态数组,我们以后可以按位置索引号取出某个元素,并且其中的数据是允许重复的。
关于ArrayList和Vector的区别,主要分为两个方面:
1. 同步性:
Vector是线程安全的,也就是说它的方法之间是线程同步的,而ArrayList是线程不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,性能会更高;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
2. 数据增长:
ArrayList和Vector都有一个初始的容量大小,当存储进他们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来的两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看出是为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长空间大小,而ArrayList没有提供设置增长空间的方法。
总结:Vector增长原来的一倍,ArrayList增加原来的0.5倍。
- 框架集合概念,分类及应用
- 集合框架_01_集合框架的构成及分类
- 集合框架的构成及分类
- java集合框架的构成及分类
- (76)集合框架的构成及分类图示
- 集合框架概念整理
- 集合框架概念
- 安全漏洞概念及分类
- SOA应用系统总体框架及相关概念
- Java中的集合框架概念
- 端口的概念及分类
- 集群的概念及分类
- 设计模式概念及分类
- 接口测试概念及分类
- 排序的概念及分类
- java基础之集合框架--HashMap深入理解及应用
- Java集合框架应用
- onvif概念及应用?
- RabbitMQ消息队列(九):Publisher的消息确认机制
- 关于Windows Service的调试问题
- android 画虚线
- 子线程使用gcd起timer
- bootstartp 简单登陆页面(另成一个html就可以看到效果)
- 框架集合概念,分类及应用
- android开发笔记之设置(settings)DB数据库
- spring 架构设计
- Java 通过JNI调用C或者CPP代码
- LATEX公式入门
- JavaMD5
- OpenStack Conceptual Architecture(模块结构图)
- java 计算两个大数之间的乘积(非BigDecimal版)
- 【Leetcode】Valid Sudoku