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。