1) List
分为 arraylist和linkedlist
arraylist基于动态数组实现 ,concurrent并发包下CopyOnWriteArrayList 线程安全
特征:1.允许元素为空 2、查询效率高,增删效率低 3、线程不安全
linkedlist基于双链表实现
特征:1、允许元素为空 2、插入和删除效率高,查询慢 3、既能实现栈后进先出,也能实现队列 先进先出 ,也能实现双向队列,因为其提供了...first()和...last()方法
2) Map
2.1 HashMap 以key-value键值对形式存储,允许key为空,也允许value为空,底层数据结构是数组+链表+红黑树
查询、插入、删除效率都高
put()存储流程:
1、计算待新增的key的hash值 2、判断node【】数据是否为空或者数据长度为0的情况,则需要进行初始化 3、根据hash值通过位运算定计算出Node数组的下标,判断该数组第一个Node节点是否有数据,没有则插入新值,有的话,则根据具体情况进行操作:
如果该Node结点的 key (即链表头结点)与待新增的key相等(==或者equals),则直接覆盖值,最后返回旧值;。如果该结构是树形,则按照树的方式插入新值;
·如果是链表结构,则判断链表长度是否大于阈值8,如果>=8并且数组长度>=64才转为红黑树,如果>=8并且数组长度<64则进行扩容; ·如果是链表结构,则判断链表长度是否大于阈值8,如果>=8并且数组长度>=才转为红黑树,如果>=8并且数组长度<则进行扩容;
·如果不需要转为红黑树,则遍历链表,如果找到key和hash值同时相等,则进行覆盖返回旧值,如果没有找到,则将新值插入到链表的最后面(尾插法); 5.判断数组长度是否大于阈值,如果是则进入扩容阶段。
2.2 HashTable
是一个哈希散列表,可使用重入锁Synchronized实现线程安全,key和value都不能为空,被高性能的ConcurrentHashMap代替
2.3 TreeMap
是一个有序结合,底层数据结构是红黑树结构,每个元素都存放在红黑树节点上,默认使用自然排序,也可以自定义排序,线程不安全
特征:key不允许为空,value可以多个为空
2.4 LinkedHashMap
可以保证插入顺序,访问顺序,线程不安全
3) Set
3.1 HashSet
用来存储没有重复元素的集合类,并且是无序的,底层使用HashMap机制,所以线程不安全
3.2 TreeSet
有序并且没有重复的集合类,线程不安全,自然升序排序和自定义排序
3.3 LinkedHashSet
可以保证插入顺序或者访问顺序,没有重复元素,线程不安全