Collection接口
Collection接口继承了一个父接口叫 Iterable ,从而继承了一个叫 Iterator() 方法,这个方法可以获取到迭代器对象 Iterater ,这个接口里有三个方法可以对元素进行迭代和删除。
Collection下分为两大类:
(一)List 集合
List集合存储元素特点:有序可重复,元素有下标。
有序指的是存进去和取出来的顺序是相同的。
(二)Set集合
Set集合存储元素特点:无序不可重复,元素没有下标。
无序指的是存进去和取出来的顺序不一定相同。
List 集合下分为三类(挑常用的)
(1)ArrayList集合
特点:
- 底层采用了数组这样的数据结构
- ArrayList是非线程安全的
- 初始化容量是10
- 底层是Object类型的的数组Object[]
- 初始扩容是到原容量的1.5倍(源代码是采用位运算符:新容量=原容量+原容量>>1)
- 预估给定一个初始化容量,减少数组的扩容,也是比较重要的优化策略
- 元素在空间存储上,内存地址连续,便于检索
优点:
检索效率高
缺点:
随机增删元素效率较低(末尾增删元素不影响效率)
(2)LinkedList
特点:
- 底层采用了双向链表数据结构
- 链表上的元素在空间存储上,内存地址不连续
优点:
随机增删元素效率高
缺点:
检索效率低
(3)Vector
特点:
- 底层采用了数组这种数据结构
- Vector初始化容量是10
- 扩容为原容量的2倍
- Vector底层是线程安全的
因为底层都是采用了synchronized修饰的方法,所以线程安全,但是效率较低,使用较少。
Set集合下分为两类(挑常用的)
(1)HashSet
特点:
- 底层是调用了HashMap集合,实际上元素是存储到HashMap的key部分
- HashMap底层是哈希表数据结构
- HashSet初始化容量是16
- 建议自定义初始化容量的时候是2的倍数
- 自动扩容是原容量的2倍
优点和缺点都是跟HashMap挂钩,所以在后面说。
(2)SortedSet下面的TreeSet
特点:
- TreeSet底层是TreeMap,TreeMap底层是二叉树结构
- 因为继承了SortedSet,所以也继承了其父的优点
- 在SortedSet集合下的元素会自动排序
注意:自动排序前提是实现了comparable接口并重写compareTo方法或者自定义类实现comparator接口并重写compare方法。
Map集合
- Map集合和Collection接口没有关系
- Map集合里存的是key和value这种键值对
- Map里的key和Set里的元素存储特点相同
Map下分为三大类
(1)HashMap
- 初始化容量16,扩容2倍(旧容量左移一位就是扩大2倍,可以看源代码)
- 非线程安全
- key和value可以为null
- 默认加载因子是0.75(就是在数组里有0.75的填充时就会自动扩容,而且默认初始化容量最好是2的倍数)
- 数组元素是一条单向链表
优点:
底层有数组和单向链表,所以随机增删和检索效率都很高。
注意:在链表上的元素达到8以上的时候,单向链表会转成红黑树数据结构
当红黑树上的节点元素小于6的时候,就会自动转为单向链表(为了提高效率)
(2)HashTable(少用,效率低,线程安全的)
- 初始化容量11,扩容2倍+1
- 线程安全
- key和value都不能是null
在HashTable下有一个子类Properties
- Properties继承HashTable所以也是线程安全的
- Properties只能存储String类型的元素
- Properties也叫属性类
(3)TreeMap
- 底层是二叉树数据结构
- 要会TreeMap的遍历方式
自用的小总结复习用,欢迎大佬指点。