Class 初始大小 加载因子 扩容倍数 底层实现 否线程安全 同步方式
    ArrayList 10 1 1.5倍+1 Object数组 线程不安全
    Vector 10 1 2倍 Object数组 线程安全 synchronized
    HashSet 16 0.75f 2倍 HashMap 线程不安全
    HashMap 16 0.75f 2倍 Map.Entry 线程不安全
    Hashtable 11 0.75f 2倍+1 Hashtable.Entry数组 线程安全 synchronized

    HashSet与TreeSet的比较
    1.TreeSet 是二叉树实现的,Treeset中的数据是自动排好序的,不允许放入null值 。
    2.HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束 。
    3.HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例。
    ArrayList与Vector的比较
    1、Vector的方法都是同步的,是线程安全的,而ArrayList的方法不是,由于线程的同步必然要影响性能。因此,ArrayList的性能比Vector好。
    2、当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,这样。ArrayList就有利于节约内存空间。
    3、大多数情况不使用Vector,因为性能不好,但是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一致性。
    4、Vector可以设置增长因子,而ArrayList不可以。
    Arraylist与LinkedList的比较
    1、ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。
    2、因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。
    3、LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。
    4、因为LinkedList要移动指针,所以查询操作性能比较低
    HashMap和ConcurrentHashMap的区别
    1、HashMap不是线程安全的,而ConcurrentHashMap是线程安全的。
    2、ConcurrentHashMap采用锁分段技术,将整个Hash桶进行了分段segment,也就是将这个大的数组分成了几个小的片段segment,而且每个小的片段segment上面都有锁存在,那么在插入元素的时候就需要先找到应该插入到哪一个片段segment,然后再在这个片段上面进行插入,而且这里还需要获取segment锁。
    3、ConcurrentHashMap让锁的粒度更精细一些,并发性能更好。
    HashMap与LinkedHashMap的区别

    1. 相比于HashMap,linkedHashMap结构中还维护着一个双向链表,用于记录顺序。所以可以做到跟存入顺序一样取出元素。
    2. hashMap键只能允许为一条为空,value可以允许为多条为空,键唯一,但值可以多个。linkedHashMap键和值都不可以为空。