HashMap疑惑

来源:10-4 HashMap

bxljjy

2020-02-15

老师,你好,观看完本节视频后,自己又看了一下源码,仍存在些许疑问,数组的下标值是不是根据K计算出hash值。如果<K,V>都保存在链表中,那么为什么还要Set<Map.Entry<K,V>> entrySet,set这种成员,桶数组和set为什么要被transient修饰,不被序列化?

写回答

1回答

翔仔

2020-02-16

同学好,

1.transient 是表明该数据不参与序列化。因为 HashMap 中的存储数据的数组数据成员中,数组还有很多的空间没有被使用,没有被使用到的空间被序列化没有意义。所以需要手动使用 writeObject() 方法,只序列化实际存储元素的数组。

2. 由于不同的虚拟机对于相同 hashCode 产生的 Code 值可能是不一样的,如果你使用默认的序列化,那么反序列化后,元素的位置和之前的是保持一致的,可是由于 hashCode 的值不一样了,那么定位函数 indexOf()返回的元素下标就会不同,这样不是我们所想要的结果.


0
0

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程