集合
参考jdk1.8手册,熟知各集合常用方法
Collection接口
- 解释:单列集合,用来存储一个一个的对象
List接口
- 解释:存储有序的、可重复的数据
ArrayList
- 作为List接口的主要实现类;线程不安全的,效率高;底层使用数组存储
- 底层默认创建了长度是10的Object[]数组
- 在扩容方面,默认扩容为原来的1.5倍
LinkedList
- 对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储
Vector
- 作为List接口的古老实现类;线程安全的,效率低;底层使用数组存储
- 底层默认创建了长度是10的Object[]数组
- 在扩容方面,默认扩容为原来的1.5倍
Set接口
- 解释:存储无序的、不可重复的数据
- 无序性:不等于随机性。存储的数据在底层数组中并非按照索引的顺序添加,而是根据数据的哈希值决定的。
HashSet
- 作为Set接口的主要实现类;线程不安全的;可以存储null值;
- 底层:HashMap;
LinkedHashSet
- 作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历;
- 对于频繁的遍历操作,LinkedHashSet效率高于HashSet;
- 底层:HashMap;
TreeSet
- 向TreeSet中添加的数据,要求是相同类的对象;
- 可以按照添加对象的指定属性,进行“排序”;
- 底层:TreeMap;
Queue接口
Map接口
- 解释:双列集合,用来存储一对一对(key-value)的数据
HashMap
- 作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
- 在实例化以后,底层创建了一个长度是16的一维数组Node[] table
- 默认的扩容方式:扩容为原来容量的2倍,并将原有的数据复制过来
- 底层结构:数组+链表(jdk7及之前);数组+链表+红黑树(jdk8)
LinkedHashMap
- 保证在遍历map元素时,可以按照添加的顺序实现遍历
- 对于频繁的遍历操作,此类执行效率高于HashMap
TreeMap
- 保证按照添加的key-value对进行排序,实现排序遍历;底层使用红黑树
Hashtable
- 作为古老的实现类;线程安全的,效率低,不能存储null的key和value
- Properties
- 常用来处理配置文件。key和value都是String类型
Map结构的理解
- Map中的key:无序的、不可重复的,使用Set存储所有的key
- Map中的value:无序的、可重复的,使用Collection存储所有的value
- 一个键值对:key-value构成了一个Entry对象
- Map中的entry:无序的、不可重复的,使用Set存储所有的entry