目录
一,集合的介绍(概念)
集合:容器,存储多个数据。底层使用不同的数据结构进行存储,每种数据结合都有各自的特点。
二,Collection接口
1,Queue
队列。
2,list
1,ArrayList
底层实现:数组(数组扩容)。
特点:
1,存储元素个数有序(添加的顺序)。
2,存储元素允许重复。
3,查找效率高(底层的数组为连续的空间)。
4,删除,添加时效率低。涉及到元素的移动,数组的扩容(拷贝到数组中的数据)。
5,数组扩容时为原数组1.5倍。
6,线程不安全。
2,LinkedList:
底层实现:链表(双向链表,提高查询效率,可以从头节点或者尾节点查找)。
特点:
1,存储元素有序(存储顺序)。
2,存储元素允许重复。
3,查找效率低。
4,删除,添加效率高(只修改前后的节点地址,不需要扩容)。
5,不涉及扩容。
6,线程不安全。
3,Vector:
底层实现:数组(数组扩容)。
特点类似ArrayList,线程安全。
4,List接口实现类循环方式
1,普通for循环。
2,增强for循环
3,迭代器
3,Set
1,HashSet:
底层实现:HashMap(以Key-value形式存储,存储到散列表(hash表又名哈希表)中)。
存储过程:
将存储的元素作为底层HashMap存储时的Key,value值自动的创建。
特点:
1,存储元素无序。
2,存储元素不能重复。
3,没有提供获取元素的方法。只能遍历获取(1,增强for循环。2,迭代器)。
4,线程不安全。
2,TreeSet:
底层实现:TreeMap(以key-value形式存储,存储到红黑树中)。
存储过程:
将存储的元素作为底层TreeMap存储时的Key值,value值自动的创建。
将key进行值的比较存储到红黑树的定制位置。
特点:
1,存储元素有序(值的大小顺序)
2,存储元素不允许重复。
3,没有提供查找方法,只能遍历获取(1,增强for循环。2,迭代器)。
4,线程不安全。
4,Map接口(key-value形式存储)
1,HashMap:
底层实现:
1,jdk1.8之前:数组+链表
1,扩容时使用头插法。
2,散列表的数组扩容为原来的2倍。
2,jdk1.5之后:数组+链表+红黑树(红黑树可以提高查询的效率)
1,重要属性
1,1.DEFAULT_INITIAL_CAPACITY=16:
默认数组的初始换容量(没有指定数组长度使用该默认值)。
2,MAXIMUM_CAPACITY=2^30
数组最大长度。
3,DEFAULT_LOAD_FACTOR=0.75f
默认负载因子(数组长度*负载因子 = 扩容阈值)
4,TREEIFY_THRESHOLD=8
链表转换为红黑树的链表个数阈值。
5,UNTREEIFY_THRESHOLD=6
红黑树转换为链表的链表个数的阈值
6,MIN_TREEIFY_CAPACITY=64
链表转换为红黑树的最小数组长度
7,threshold:阈值
8,loadFactor:负载因子
2,构造方法:
1.new HashMap();
1.默认的负载因子为负载因子属性赋值
2.没有创建散列表底层的数组
2.new HashMap(数组长度);
1.默认的负载因子为负载因子属性赋值
2.计算了数组的长度(必须为2的n次幂)
3.没有创建散列表底层的数组
3.new HashMap(数组长度,负载因子);
1.指定的负载因子为负载因子属性赋值
2.计算了数组的长度(必须为2的n次幂)
3.没有创建散列表底层的数组
特点:
1,存储元素有序。
2,存储元素的key值不可以重复
3,存储元素的value值可以重复
4,散列表的数组每次扩容为原长度的2倍
5,线程不安全
2,TreeMap:
底层实现:红黑树
特点:
1,存储元素有序(值大小顺序)
2,存储元素的key不可以重复并不能为null。
3,存储元素的value可以重复。
4,线程不安全。