一.集合:
1.HashMap和HashSet:
put方法:拉链法处理hash冲突,大致流程:先算出key的hash值,在去对map中的数组长度%,得到桶的位置,在遍历桶中的数据,equal方法比较是否相等,相等则覆盖,没找到相等的则加入尾部(1.8)或者头部(1.7)
扩容:当数据总数>map的tab数组长度*负载因子(默认0.75),扩张为原来长度的2倍,长度都为2的幂次方的原因是加倍和%都可以通过位运算来完成
get方法:先hash,找到桶的位置,遍历数组或者在红黑树中寻找改key
比较1.7到1.8的优化点: hash扰动函数的次数减少,提高了效率;红黑树+链表 替代 链表;插入链表时,头插法换成了尾插法(避免多线程操作时造成死锁问题);优化扩容时候下标的计算,原来是重新把下标全部计算,升级后,部分数据下标在原来位置,部分下标位置调整为=原来的位置下标+历史map的长度
参考:tech.meituan.com/2016/06/24/…
2.LinkedhashMap:带有顺序的HashMap,先进入先取到
3.ConcurrentHashMap:多线程情况下使用的线程安全的HashMap,1.7用的是分段锁的思想,用的是Lcock的思想;1.8用的是synchronized和CAS来保证线程安全;
4.TreeMap:红黑树实现的可以排序的Map
5.ArrayList和LinkedList:ArrayList基于数组;LinkedList基于链表; ArrayList底层用Object数组,支持快速随机访问;LinkedList底层用双向链表,不支持快速随机访问
6.CopyOnWriteArrayList:线程安全的ArrayList
二.多线程:
1.线程池 重要参数
2.典型线程池类型介绍
3.多线程常用工具类