List,Set,Map区别
顺序列表、无重复集合、键值对,阐述自己常用的实现类
ArrayList与LinkedList
线程安全方面、底层数据结构、增删性能对比(注意特殊位置以及元素数量级)、快速随机访问、内存占用
RandomAccess接口
只是一个标识,标识是否支持快速随机访问,支持首选for循环,其次是foreach
ArrayList与Vector
主要区别就是Vector线程安全,所有方法就加了synchronized
HashMap与Has hTable
线程安全方面、效率方面、是否支持null作为key、初始容量(HashTable为11)和扩容机制不同(HashTable为2n+1)、底层数据结构不同(HashMap有树化机制)
HashMap与HashSet
HashSet方法基本都是调用HashMap的方法
HashSet检查重复原理
计算HashCode,如果遇到重复再调用equals比较
HashMap底层实现
数组+链表/红黑树
HashMap长度为什么是2的幂次方
主要围绕hash的均匀程度来阐述,从HashMap的下标计算方法开始,&可以提高运算效率
HashMap1.7多线程环境下的死循环问题,头插法
ConcurrentHashMap
底层结构:1.7分段数组+链表,1.8数组+链表/红黑树
线程安全实现:1.7分段分隔数组(16个Segment),每把锁锁住一个Segment,访问不同Segment的数据不会出现锁竞争;1.8摒弃Segment,数据结构和HashMap的一样了,每个Table使用synchronized和CAS实现线程安全,synchronized只锁定链表或红黑树的首节点,这样只要不发声hash冲突就不会出现锁竞争问题