一:集合结构
1:List:
有序(元素存入集合的顺序和取出的顺序已知)、可以重复存储、具有索引下标。常用的实现类:ArrayList、LinkedList、Vector。查找元素效率高,插入删除元素效率低。
2:Set:
无序(存入、取出的顺序有可能不一致)、不可重复存储、没有索引下标。常用的实现类:HashSet、LinkedHashSet、TreeSet。查找元素效率低,插入删除效率高。
3:Map:
是一个键值对集合,(Key)键 无序、唯一;(Value)值 允许重复。常用的实现类:HashMap、TreeMap、HashTable、LinkedHashMap、ConcurrentHashMap。
二:集合底层所使用的数据结构
Collection:
(1):List
ArrayList:Object数组。
Vector:Object数组。
LinkedList:双向循环链表。
(2):Set
HashSet(无序、唯一):采用HashMap实现。
TreeSet(有序、唯一):红黑树(自平衡的排序二叉树)。
(3):Map
HashMap:JDK1.8之前HashMap由数组+链表组成。数组是HashMap的主体,链表则为了解决哈希值冲突而存在("拉链法"解决冲突)。JDK1.8之后,在解决哈希值冲突上发生了变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少冲突。
LinkedHashMap:LinkedHashMap继承自HashMap,底层采用的仍是数组+链表或红黑树组成。
HashTable:数组+链表组成。数组是HashTable的主体,链表则是为了解决哈希冲突而存在。
TreeMap:红黑树(自平衡的排序二叉树)。
三:HashMap的实现原理
HashMap是基于Hash算法实现的,其具体的判断过程如下图所示。