hashMap

  1. HashMap概述

HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

  1. HashMap的数据结构
    HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。一个是数组,另外一个是链表,所有的数据结构都可以用这两个基本结构来构造的。
数据结构
  1. HashMap的存取 (hashCode一样处理方式)

    HashMap的功能是通过“键(key)”能够快速的找到“值”。下面我们分析下HashMap存数据的基本流程:
    1、 当调用put(key,value)时,首先获取key的hashcode,int hash = key.hashCode();
    2、 再把hash通过一下运算得到一个int h.

HashMap会先用key的hash值来检查是否发生了hash碰撞,也就是对应的位置是否为空,为空的话就创建一个Entity<K,V>对象,在 table[index]位置上插入,这样插入结束;如果有的话,通过链表的遍历方式去逐个遍历,看看有没有已经存在的key,有的话用新的value替 换老的value;如果没有,则在table[index]插入该Entity,把原来在table[index]位置上的Entity赋值给新的 Entity的next,这样插入结束。

4、加载因子

当 创建 HashMap 时,有一个默认的负载因子(load factor),其默认值为 0.75,这是时间和空间成本上一种折衷:增大负载因子可以减少 Hash 表(就是那个 Entry 数组)所占用的内存空间,但会增加查询数据的时间开销,而查询是最频繁的的操作(HashMap 的 get() 与 put() 方法都要用到查询);减小负载因子会提高数据查询的性能,但会增加 Hash 表所占用的内存空间。我们可以在创建 HashMap 时根据实际需要适当地调整 load factor 的值;如果程序比较关心空间开销、内存比较紧张,可以适当地增加负载因子;如果程序比较关心时间开销,内存比较宽裕则可以适当的减少负载因子。通常情况 下,无需改变负载因子的值

加载因子是表示Hsah表中元素的填满的程度.若:加载因子越大,填满的元素越多,好处是,空间利用率高了,但:冲突的机会加大了.反之,加载因子越小,填满的元素越少,好处是:冲突的机会减小了,但:空间浪费多了,冲突的机会越大,则查找的成本越高.反之,查找的成本越小.因而,查找时间就越小.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • HashMap 是 Java 面试必考的知识点,面试官从这个小知识点就可以了解我们对 Java 基础的掌握程度。网...
    野狗子嗷嗷嗷阅读 6,719评论 9 107
  • 前言 这次我和大家一起学习HashMap,HashMap我们在工作中经常会使用,而且面试中也很频繁会问到,因为它里...
    liangzzz阅读 8,029评论 7 102
  • 本文转自 https://zhuanlan.zhihu.com/p/21673805 美团点评技术团队· 3 个月...
    抓兔子的猫阅读 1,090评论 0 1
  • 初入职场有三种职业发展模式: 一、选择一家大公司,工作一两年,镀点金之后,迅速跳槽,应该很容易拿到senior的职...
    成长是刚需阅读 767评论 0 0
  • 公司地铁站5号口有一片绿化草坪,在草坪右手边有条路口,那里常常有很多的小吃摊。早晨卖的是煎饺、煎饼、包子和豆浆。晚...
    颜先生阅读 327评论 0 1