美文网首页
HashMap源码阅读--2018-03-14

HashMap源码阅读--2018-03-14

作者: 逝去的风信子 | 来源:发表于2018-03-14 16:55 被阅读0次

以前看了java7的HashMap源码,时间长了全忘了,今天重新阅读java8的hashmap,发现变动挺大,记录下。

1.node取代entry。

2.数量超过8个使用红黑树。

阅读中发现transient关键字很多,但是hashmap序列化很正常。找到解释如下:

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

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

手写了写入读出

private void writeObject(java.io.ObjectOutputStream s) throws IOException {

int buckets = capacity();

// Write out the threshold, loadfactor, and any hidden stuff

s.defaultWriteObject();

s.writeInt(buckets);

s.writeInt(size);

internalWriteEntries(s);

}

相关文章

  • HashMap源码阅读--2018-03-14

    以前看了java7的HashMap源码,时间长了全忘了,今天重新阅读java8的hashmap,发现变动挺大,记录...

  • Java集合框架—HashMap—源码研读1

    前言: 本篇为HashMap源码研读系列第一篇,主要分析HashMap中put()方法的源码。阅读前需要对Hash...

  • Java集合-HashSet源码实现分析

    概要 阅读本文前,请先阅读笔者写的文章:Java集合-HashMap源码实现深入解析理解了HashMap,再来理解...

  • 源码阅读 - HashMap

    本文涉及到红黑树的部分参考二叉树 - 红黑树 0. HashMap是什么 一种增删改查操作(不考虑哈希冲突)能达到...

  • HashMap源码阅读

    HashMap概述 hashMap是在Java中经常使用的一个类,继承自AbstractMap类实现了map接口,...

  • HashMap源码阅读

    定义 可以看到HashMap是继承 AbstractMap实现了Map,Cloneable,Servializab...

  • HashMap源码阅读

    1. 什么是HashMap? 1.1 map的定义 首先你要知道什么是map,map就是用于存储键值对(

  • HashMap 源码阅读

    HashMap 源码阅读 之前读过一些类的源码,近来发现都忘了,再读一遍整理记录一下。这次读的是 JDK 11 的...

  • HashMap源码阅读

    本文基于JDK1.8 >读完本文预计需要25分钟(因有大量源代码,电脑屏观看体验较佳) 摘要 HashMap相信...

  • HashMap 源码阅读

    HashMap 在 java map 中的继承关系 底层存储结构: Node 类型数组image.png 存储数据...

网友评论

      本文标题:HashMap源码阅读--2018-03-14

      本文链接:https://www.haomeiwen.com/subject/knofqftx.html