1.集合框架(继承关系)
1.1 Collection接口
- Collection接口:下面有两大分支,List和Set。
- List存储的数据,有顺序,允许重复;
- Set存储的数据,没有顺序,不允许重复。
1.1.1 List接口
1.1.1.1实现类ArrayList集合类
- 存储方式:
1、底层数据结构基于"Object 数组"
transient Object[ ] elementData; - 扩容机制:
1、初始化长度为10;
按照无参构造方法创建集合,底层数组默认长度为0,第一次添加元素时,默认增长至10。
按照有参构造方法创建集合,底层数组按照指定长度创建。
2、最大容量为:Integer.MAX_VALUE 或 Integer.MAX_VALUE - 8
3、grow() 方法:按原有容量的1.5倍进行扩容 - 应用特点:
1、实现RandomAccess接口:支持高效的随机元素访问(可以使用下标高速访问)
2、插入删除元素效率低
3、线程不安全
4、性能高
1.1.1.2实现类Vector集合类
- 存储方式:
1、底层数据结构基于"Object 数组"
protected Object[] elementData; - 扩容机制:
1、初始化长度为10
2、最大容量为:Integer.MAX_VALUE 或 Integer.MAX_VALUE - 8
3、grow() 方法:按原有容量的2倍进行扩容 - 应用特点:
1、实现RandomAccess接口:支持高效的随机元素访问
2、插入删除元素效率低
3、方法中使用synchronized,保证线程安全
4、性能差
1.1.1.3实现类LinkedList集合类
- 存储方式:
1、底层数据结构基于"双向链表"
JDK1.6之前为循环链表
JDK1.7取消了循环 - 扩容机制:
双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好 - 应用特点:
1、不支持高效的随机元素访问(未实现RandomAccess接口)
2、插入元素效率高
3、线程不安全
1.1.2 Set接口
1.1.2.1 HashSet集合类
- 存储方式:底层数据结构基于"HashMap"
private transient HashMap<E,Object> map; - 应用特点:
1、线程不安全。
2、存取速度快。
1.1.2.2 LinkedHashSet集合类
- 存储方式:底层数据结构基于“LinkedHashMap"
super(16, .75f, true);
map = new LinkedHashMap<>(initialCapacity, loadFactor); - 应用特点:
1、线程不安全。
2、存取速度快。
3、链表维持存入顺序。
1.1.2.3 SortedSet接口——>TreeSet集合类
- 存储方式:底层数据结构基于"TreeMap"
public TreeSet() {
this(new TreeMap<E,Object>());
} - 应用特点:
1、线程不安全。
2、存取速度快。
3、自动排序。(必须实现Comparable接口)
1.1.3 其他常用接口与类(Queue接口和Stack类)
1.1.3.1 Queue接口
- 存储方式:Queue接口直接实现Collection接口
- 应用特点:
1、维护了一个普通队列
2、只许从一端进,另一端出。
1.1.3.2 Deque接口
- 存储方式:Deque接口实现Queue接口
- 应用特点:
1、维护了一个双端队列
2、允许执行两端进或者两端出操作。
Queue接口(队列)的子类为Deque接口(双端队列)LinkedList既实现了List接口又实现了Deque接口所以它既可以当做链表的实现类又可以当做队列的实现类。
1.1.3.3 Stack类
- 存储方式:Stack类继承Vector类;
- 应用特点:
1、维护了一个栈
2、只允许从一个端口进栈和出栈。
因为Stack类实现了Vector类所以它的存储方式,扩容机制,应用特点和Vector一致。
1.2 Map接口
- KV(key - value)键值对集合
1.2.1 HashMap类
- 存储方式:
1、基于哈希表(Hash Table)设计:
JDK1.7 : 底层数据结构基于“数组”+“链表”
JDK1.8 : 底层数据结构基于“数组”+“链表”+“红黑树”(当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间)
2、transient Node<K,V>[ ] table; - 扩容机制:
1、初始容量为16
2、加载因子为0.75:当 元素个数 超过 容量长度的0.75倍 时,进行扩容
3、按原有容量的2倍进行扩容 - 应用特点:
1、线程不安全
2、性能高
3、允许Null key和Null value,Null Key只允许有1个,Null value 可以有多个
1.2.2 LinkedHashMap类
- 存储方式:
1、继承自HashMap,链表采用“双向链表”
2、 Entry<K,V> before, after; - 应用特点:
1、线程不安全
2、有序
1.2.3 SortedMap接口——>TreeMap类
- 存储方式:
1、底层数据结构基于“红黑树”
2、private transient Entry<K,V> root; - 应用特点:
1、线程不安全
2、自动排序(必须实现Comparable接口)
1.2.4 Hashtable类
- 存储方式:底层数据结构基于“数组”+“链表”
- 扩容机制:
1、默认为11
2、每次扩容后,容量变为原来的2n+1 - 应用特点:
1、线程安全
2、性能差
3、不允许有Null value,会导致NullPointerException