面经:)

  • -

面经

- HashCode与equals的区别与联系
- 在没有覆盖过equals过的情况下,使用equals方法都是调用Object类的equals方法。而equals方法主要是用于判断对象的引用地址是否是同一个地址。
- HashCode在计算时与对象的属性有关,因此在计算HashCode之后对象的属性不能随意更改。而且HashCode只在集合中使用。
- 将对象放入集合时,首先先判断要放入的对象的HashCode值是否与集合中的任意一个元素的HashCode值相等,如果不相等直接放入集合中,如果相等,则通过equals方法来判断要放入的对象与集合中的对象是否相等,如果相等则不放入,否则放入集合。
- HashMap的底层实现
- HasMap实际是一种“”数组散列“”,即“”数组+链表“”。
- HashMap底层实际是一个数组,数组中的每一项又是一个链表。
- 每个MapEntry其实就是一个key+value,除此之外,还持有一个指向下一个元素的引用,“”key+value“”+Entry

 public Entry<K,V> implement Map.Entry<K,V>{
    final K key;
    V value;
    Entry<K,V> next;
    final int hash;
}

Hashput允许放空键和空值为null;
调用 indexFor(int h, int length) 方法来计算该对象应该保存在 table 数组的哪个索引处,通过h&table.length-1而HashMap底层数组的长度总是 2 的 n 次方,这是HashMap在速度上的优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值