Java集合面试题专题

本文专注于Java集合面试的重点,涵盖HashMap的hash碰撞、默认容量、实现原理以及多线程问题。对比了HashMap与HashTable、ConcurrentHashMap的区别,并探讨了ConcurrentHashMap的锁分段技术和迭代器一致性。同时,文章讨论了HashSet、TreeSet、ArrayList、LinkedList、Vector等集合类的实现原理、区别及适用场景。
摘要由CSDN通过智能技术生成

Java集合面试题专题

	该为北京面试面试题记录!不喜勿喷
  1. 什么是hash碰撞?

      如果两个元素不相同,但是hash函数的值相同,这两个元素就是一个碰撞!因为把任意长度的字符串变成固定长度的字符串,所以存在一个hash对应多个字符串的情况,所以碰撞必然存在;
    
  2. hashMap默认容量为什么是16?
    - 默认容量都是 16 ,负载因子是 0.75 。就是当 HashMap 填充了 75% 的 busket 是就会扩容,最小的可能性是(16 * 0.75 = 12)
    为了减少hash值的碰撞,需要实现一个尽量均匀分布的hash函数,在HashMap中通过利用key的hashcode值,来进行位运算;公式:index = e.hash & (newCap - 1);反观长度16或者其他2的幂,length - 1的值是所有二进制位全为1,这种情况下,index的结果等同于hashcode后几位的值 只要输入的hashcode本身分布均匀,hash算法的结果就是均匀的;所以,**HashMap的默认长度为16,是为了降低hash碰撞的几率参考文章

  3. HashMap 的长度为什么是 2 的幂次方?
    为了能让 HashMap 存取高效,尽量较少碰撞,也就是要尽量把数据分配均匀,每个链表/红黑树长度大致相同。这个实现就是把数据存到哪个链表/红黑树中的算法。参考地址

  4. HashMap实现原理?
    ·Java 中最常用的两种结构是数组和模拟指针(引用),几乎所有的数据结构都可以利用这两种来组合实现,HashMap 也是如此。实际上 HashMap 是一个“链表散列”。HashMap 是基于 hashing 的原理。HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值