一、Collection和Collections的区别?
Collection是集合类的上级接口,本身是一个interface 还有Set 和List接口的父接口 都继承了他
包含一些常用的操作 size iterator clear hashcode 等方法
Collections是一个集合框架的辅助类,里面包含了一些对集合的排序 ,反序,乱序,搜索,序列化等
二、hashmap与hashtable区别?ConcurrentHashMap实现原理
两者最主要的区别是hashtable是线程安全的,而hashmap非线程安全
HashTable的实现方法里面都添加了synchronized关键字来确保线程同步,因为相对而言HashMap的性能会高一些,平时开发中若无特殊需要建议使用HashMap,在多线程的环境下若使用HashMap需要使用Celloctions.synchronizedMap()方法来获取一个线程安全的集合
hashmap 是无序的 实现原理是 数组加链表的形式,其实是一个线性数组
其实可以看出JDK1.8版本的ConcurrentHashMap的数据结构已经接近HashMap,相对而言,ConcurrentHashMap只是增加了同步的操作来控制并发,从JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+红黑树。
1.数据结构:取消了Segment分段锁的数据结构,取而代之的是数组+链表+红黑树的结构。
2.保证线程安全机制:JDK1.7采用segment的分段锁机制实现线程安全,其中segment继承自ReentrantLock。JDK1.8采用CAS+Synchronized保证线程安全。
3.锁的粒度:原来是对需要进行数据操作的Segment加锁,现调整为对每个数组元素加锁(Node)。
4.链表转化为红黑树:定位结点的hash算法简化会带来弊端,Hash冲突加剧,因此在链表节点数量大于8时,会将链表转化为红黑树进行存储。
5.查询时间复杂度:从原来的遍历链表O(n),变成遍历红黑树O(logN)。