集合框架面试总结

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、

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值