集合类基础知识

1.LinkedHashMap和HashMap和TreeMap和HashTable和concurrentHashTable的区别

HashMap是由数组和链表或红黑树组成,先通过key的hash值来确定在数组中的位置,该位置可以放链表放相同hash值的entry。

               当链表长度大于8时转红黑树。

LinkedHashMap是有序的,继承了HashMap,entry放在双向链表Node中来确保有序存放。

TreeMap是排序的,自动升序排列。比较慢

Hashtable是线程安全的,性能差,整个方法synchronize。

ConcurrentHashMap是Java5后替代HashTable的,CAS加方法内部分synchronized比Hashtable好。

    由Node<K,V>[] table数组和链表和红黑树组成

    先根据key算出hash值,根据hash值放在数组的某个位置上。若该位置Node为空没有元素,则使用CAS方式尝试添加根据该对象的偏移量判断当前值和期待的                 值一样则更新成新值。

    如果该Node有元素则用synchronize锁定该Node,遍历列表修改或者添加末尾,红黑数的话就添加到树上。

2.ArrayList和LinkedList和Vector的区别

ArrayList是数组结构,只有当数组放满才会1.5倍扩容,LinkedList是链表, Vector是线程安全的

3.HashSet和LinkedHashSet和TreeSet的区别

HashSet底层是HashMap

LinkedHashSet 底层是LinkedHashMap

TreeSet 底层是TreeMap是有序的,自动升序排列

原文地址:https://www.cnblogs.com/t96fxi/p/12397749.html