HashMap源码及原理详解

打印 上一主题 下一主题

主题 904|帖子 904|积分 2712

目录

HashMap概要

代码如果没有特定说明,为JDK 1.8


  • HashMap用来存放键值对,是Map接口的实现,是非线程安全
  • 可以存储key和value为null的值,但key为null的节点只能有一个
  • 哈希值的计算:在hashCode的基础上添加扰动函数,使元素分布更加随机
  • 哈希冲突:通过链表存储具有相同索引的元素,JDK1.8引入红黑树解决链表过长查询效率慢的问题
  • 容量:

    • 总是以2的幂次方作为哈希表大小,用于优化key的哈希值的计算过程,默认初始容量为16;
    • 2倍扩容,JDK 1.8优化了key的数组下标的计算过程;JDK 1.8使用尾插法代替头插法,避免循环链表问题

JDK1.8 HashMap数据结构图

基本属性

[code]public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {    // 序列号    private static final long serialVersionUID = 362498820763181265L;    // 默认的初始容量是16    static final int DEFAULT_INITIAL_CAPACITY = 1

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

干翻全岛蛙蛙

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表