美文网首页
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源码笔记(一)

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