美文网首页
HashMap源码笔记(一)

HashMap源码笔记(一)

作者: wervy | 来源:发表于2019-12-10 16:56 被阅读0次

我们先看HashMap的文字描述部分

HashMap是基于哈希表实现的Map接口,相比于Hashtable,HashMap的key和value都可以为空,并且HashMap不是线程安全的,HashMap是无序的

我们在代码中分别测试下HashMap 和Hashtable

返回结果如下:表明Hashtable的key和value都不能为空

测试HashMap

返回结果如下:表明HashMap的key和value都可以为空

再看下面一段文字描述

一个HashMap实例有两个参数影响它的性能:初始容量和装载因子。容量是哈希表中桶的 数量,初始容量是哈希表创建时的容量。装载因子用来衡量HashMap满的程度,就是决定hash 表中用掉多少容量时,进行自动扩充容量的因子.当哈希表中entry的数量超过装载因子和当前容量的乘积时,哈希表内部结构将会重新构建,使得哈希表容量约是桶数量的两倍

默认装载因子0.75在时间和空间成本上之间提供了很好的折衷,更高的值减少了空间开销,但是增加了查找成本,当设定初始容量的时候,应考虑map中的预期数量和load factor.以便最小化rehash操作,如果初始容量大于最大条目数除以装载因子,rehash操作将不会发生。

如果map中要存储很多元素,应该设置容量大一点,以便调效率,而不是让它执行根据需要自动rehash哈希表。

如果多个key的hascode值相同,会降低哈希表的性能。

注意HashMap是不同步的,如果多线程在同时处理一个HashMap,外部必须做同步操作。一般,操作map需要一些同步对象来封装map.如果没有这样的对象,那么需要用synchronizedMap来封装

在迭代器查询期间,如果对map的数据结构进行操作,会抛出ConcurrentModificationException,除了使用iterators自己的remove方法

相关文章

  • HashMap源码笔记(二)

    紧接这上一篇:HashMap源码笔记(一)我们继续来分析HashMap源码,接下来我们来看看HashMap的源码说...

  • HashMap剖析

    Java集合:HashMap源码剖析 一、HashMap概述 二、HashMap的数据结构 三、HashMap源码...

  • HashMap源码笔记(一)

    我们先看HashMap的文字描述部分 HashMap是基于哈希表实现的Map接口,相比于Hashtable,Has...

  • HashMap源码

    HashMap的源码,基于jdk1.7Map的源码 AbstractMap的源码 HashMap的源码

  • HashMap源码笔记

    前言 HashMap,应该所有java程序员都用过这个集合,是平时中很常用的一个集合。大部分人都知道怎么用它,也知...

  • HashMap源码笔记

    hashmap查找 getNode() 计算hash key.hashCode() ^ (h>>>16) 高...

  • HashMap源码笔记

    1.构造函数//默认size=16,默认负载因子0.75 1.1 1.2 2.put数据2.1 2.2 2.3 2.4

  • java源码分析之LinkedHashMap

    相关文章java源码分析之HashMap(一)java源码分析之HashMap(二)java源码分析之HashMa...

  • HashMap原理以及ConcurrentHashMap

    一、HashMap的关键参数及部分源码解析 1.1 HashMap的几个关键参数 HashMap的源码中存下以下几...

  • JAVA 8 HashMap 源码分析

    JAVA 8 HashMap 源码分析 一 什么是HashMap? HashMap 继承了AbstractMap,...

网友评论

      本文标题:HashMap源码笔记(一)

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