集合小总结

list(列表) set(保证数据的唯一性) map(维护多个k-v键值对,k值唯一)

集合框架图




Collection(集合爸爸级别的接口 ☺) 继承关系

    ------>List 可以存放重复的内容

            ------>ArrayList 线程不安全,查询速度快(底层为数组,有索引)

            ------>LinkedList 线程不安全,增删速度快(底层为双向链表,增删只要维护当前数据的左右节点就可以)

            ------>Vecto 线程安全,单速度慢

    ------>Set 不能存放重复内容,重复内容靠hashCode()和equls()进行区别,维护一个Map来存储数据的。

            ------>HashSet 底层数据结构是哈希表。线程不安全,不同步

                       通过HashCode()与equals()来保证数据的唯一性

                        如果hashCode值相同,才会用equals判断是否为true

                        如果hashCod值不同,不进行equals判断

            ------>TreeSet 线程不安全,有序的存放,可以对集合中的元素进行排序

Map接口 (存储K-V键值对,key唯一)

    ----->HashMap 底层链表加数组

        实现原理是将put进来K-V封装成Entry对象存储到一个Entry数组中,数组下标有Key的哈希值与数组的长度计算得来,    如果该数组当前下标已经有值,则将数组当前下标的值指向新添加的Entry对象(链表)。

    ------>TreeMap 是有Entry对象为节点组成的一颗红黑树,,put到Tree的数据默认按Key的自如顺序排序,new Tree 是传入comparator自定义排序。

HashMap 、Hashtable区别

HashMap、HashTable都实现了Map接口 HashMap继承了AbstractMap类,HashTable继承了Dictionary类

 主要区别在于,线程安全问题、速度问题、同步问题

    1、HashTable是synchronized,说明一次仅有一个小程序能够更改HashTable,任何线程要修改HashTable时首先要获得同步锁,其他线程要等到同步锁释放之后才能再次获得同步锁修改HashTable;HashMap是非synchronized的,如需对HashMap进行同步,可是哟那个Collection.synchronizeMap方法来包装映射。

            Map map  = Collctions.synchronizeMap(new HashMap(......));

    2、HashMap是可以接受NULL键NULL值,HashTable不允许出现NULL键NULL值。

    3、Hashtable默认容量为11,HashMap为16,HashMap底层要求一定为2的整数次幂,HashTable不要为2的整数次幂。

    4、HashMap 的扩容为原来的2倍,而HashTable为原来的2倍加1。