建站平台与建站系统,时事新闻摘抄,网站建设与维护期中试卷,网站模块怎么恢复Map 概述
Map 架构 HashMap
要点
以 散列(哈希表) 方式存储键值对#xff0c;访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数#xff1a;初始容量和负载因子。 初始容量#xff1a;哈希表创建时的容量负载因子#xff1a;其容量自动扩容之前被允许的最大…Map 概述
Map 架构 HashMap
要点
以 散列(哈希表) 方式存储键值对访问速度快没有顺序性允许使用空值和空键有两个影响其性能的参数初始容量和负载因子。 初始容量哈希表创建时的容量负载因子其容量自动扩容之前被允许的最大饱和量 不是线程安全的
Java7
数据结构
实现机制**数组 链表**通过链表解决哈希冲突。
table存储 K-V 的数组size容量初始为 16loadFactor负载因子默认为 0.75元素个数超过容量的 75 会触发自动扩容扩容为原始的 2 倍 获取元素 get
通过 key 的哈希计算存储位置遍历链表 计算 hash 方式高16位不变低16位和高16位做异或
static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hashCode()) ^ (h 16);
}计算下标的时候是使用 位操作而非求余
(n - 1) hash优点能使用32位计算哈希避免因为高位没有参与下标的计算而碰撞
添加元素 put
通过 key 的哈希计算存储位置查找 key 是否存在 存在覆盖 Value不存在放到桶里 or 插入链表头插法 删除元素 remove
找到指定数据并修改链表引用 Java8
实现机制数组 链表 红黑树当容量达到 64且元素达到 8 个时会将链表转为红黑树将链表插入方式改为尾插法解决循环链表 链表查询复杂度取决于链表长度为 O(n)。为了降低开销Java8 中当容量达到 64且元素达到 8 个时会转为红黑树降低复杂度为 O(logN) Java7 使用 Entry 表示数据节点Java8 使用 Node 和 TreeNode。 LinkedHashMap
在 HashMap 的基础上维护一个双向链表实现插入顺序 TreeMap
实现机制红黑树有序默认为升序Key 需要定义比较逻辑 实现 Comparable 接口重写 compareTo() 方法