HashMap疑惑
来源:10-4 HashMap
bxljjy
2020-02-15
老师,你好,观看完本节视频后,自己又看了一下源码,仍存在些许疑问,数组的下标值是不是根据K计算出hash值。如果<K,V>都保存在链表中,那么为什么还要Set<Map.Entry<K,V>> entrySet,set这种成员,桶数组和set为什么要被transient修饰,不被序列化?
写回答
1回答
-
同学好,
1.transient 是表明该数据不参与序列化。因为 HashMap 中的存储数据的数组数据成员中,数组还有很多的空间没有被使用,没有被使用到的空间被序列化没有意义。所以需要手动使用 writeObject() 方法,只序列化实际存储元素的数组。
2. 由于不同的虚拟机对于相同 hashCode 产生的 Code 值可能是不一样的,如果你使用默认的序列化,那么反序列化后,元素的位置和之前的是保持一致的,可是由于 hashCode 的值不一样了,那么定位函数 indexOf()返回的元素下标就会不同,这样不是我们所想要的结果.
00
相似问题