collection下list,set,还有什么?
还有queue队列
参考:java集合基础总结(自己总结版)_xuehuagongzi000的博客-CSDN博客
hashmap是怎么实现的?
hash表(拉链法+红黑树解决冲突)
hashmap原理总结_xuehuagongzi000的博客-CSDN博客
hashMap为什么存储2的n次幂个空间?
HashMap是根据key的hash值决定key放到哪个桶中,通过hash&(length-1)公式计算得出,2的n次方一定是最高位1其它低位是0,这样减1的时候才能得到01111这样都是1的二进制。这样(n - 1) & hash的值是均匀分布的,可以减少hash冲突。
hashSet是怎么实现的?
底层利用hashMap来实现,用key作为元素存储,而value中的值都是统一的一个固定对象
private static final Object PRESENT = new Object();
HashSet中add方法调用的是底层HashMap中的put()方法,往HashSet中添加元素,首先判断元素(也就是key)是否存在,如果不存在这插入,如果存在则不插入,这样HashSet中就不存在重复值。
所以判断key是否存在就要重写元素的类的equals()和hashCode()方法,当向Set中添加对象时,首先调用此对象所在类的hashCode()方法,计算次对象的哈希值(不同的值的hashcode值可能相同),此哈希值决定了此对象在Set中存放的位置;若此位置没有被存储对象则直接存储,若已有对象则通过对象所在类的equals()比较两个对象是否相同,相同则不能被添加。
5、Arraylist扩容?
arrayList扩容内部是怎么实现的_xuehuagongzi000的博客-CSDN博客_array list是如何扩容的
6、concurrenthashmap 和hashtable的线程安全有什么不同
Hashtable:容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下Hashtable的效率非常低下。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。
concurrenthashmap :JDK1.8的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全。数据结构采用:数组+链表+红黑树。
7、