集合类
hashmap基于哈希表的map接口实现。查询速度快。线程不安全。
底层:数组+链表
哈希冲突解决:
jdk1.7:位桶+链表
jdk1.8:位桶+链表+红黑树 当链表长度超过阈值(8)时,会将链表转化为红黑树,减少查询时间。
数组长度是不改变的,集合创建后长度是可以改变的。
集合分支体系
Collection 以value形式存储
list有序可重复
arrayList 底层:动态数组 1.5 /// 特点:适合遍历和轮训,不适合插入和删除 ///使用方法:无参 有参///常用方法:add remove get set size indexOf sublist、toArray
Vector 底层:arrayList的早期版本 扩容默认2倍///特点:线程同步(sync) 、安全性高、效率低
linkedlist
stack 底层:继承了vector peek pop push
set无序不可重复
hashset 底层:hashmap 16 0.75 ///通过set集合获取迭代器 ///无重复的原则:默认比较的是地址,用equals方法来比较+hashcode()
Iterator<String> it=set.iterator(); while(it.hasNext()){ String value=it.next; }
treeset 底层:treemap 本身有顺序,按自然顺序比,compareTo
Queue
linkedlist 底层:双向循环链表。同时实现了list和queue接口 修改性能较好
Map 以key-value形式存储
key无序无重复 value无序可重复
hashmap 结合了数组加链表的优势。既想要查询效率快,也想要增删效率高。
Node<K,V> 初始大小:16 扩容:16*0.75 链表长度:8 超过后, 红黑树 jdk1.8
hashtable (加sync:效率低)
concurrentHashMap:并发操作 value值由volatile修饰
segment :继承reentrantlock
treemap