当前位置: 首页 > news >正文

学习开发之hashmap

HashMap 是 Java 集合框架中的一部分,它实现了 Map<K, V> 接口,用于存储键值对(key-value pairs)。在 HashMap 中,每个键都是唯一的,而值可以重复。它基于哈希表实现,允许快速的插入、删除和查找操作,平均时间复杂度为 O(1)。

主要特性

  • 键的唯一性:在一个 HashMap 实例中,不允许有重复的键。如果尝试添加一个与已有键相同的键值对,新的值会替换旧的值。
  • 无序性HashMap 不保证元素的顺序,即元素插入的顺序和迭代时获取的顺序可能不同。
  • 非线程安全HashMap 不是同步的,这意味着它不是线程安全的。如果需要在多线程环境中使用,必须自行确保同步机制,或者使用 Collections.synchronizedMap 方法包装,或直接使用 ConcurrentHashMap
  • 允许 null 键和值HashMap 允许有一个 null 键和多个 null 值。

基本操作

添加元素

使用 put(K key, V value) 方法来添加键值对到 HashMap 中。

HashMap<Integer, String> map = new HashMap<>();
map.put(1, "Apple");
获取元素

使用 get(Object key) 方法根据键获取对应的值。

String value = map.get(1); // 返回 "Apple"
删除元素

使用 remove(Object key) 方法根据键删除键值对。

map.remove(1);
检查键是否存在

使用 containsKey(Object key) 方法检查某个键是否存在于 HashMap 中。

boolean exists = map.containsKey(1);
迭代 HashMap

可以通过 entrySet() 方法返回一个包含映射关系的集合,然后进行迭代。

for (Map.Entry<Integer, String> entry : map.entrySet()) {System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
}

工作原理

HashMap 的工作原理主要依赖于哈希函数。当你将一个键值对放入 HashMap 时,首先计算键的哈希码(通过调用 hashCode() 方法),然后根据哈希码决定该键值对存放在内部数组中的位置。如果有冲突(即不同的键产生了相同的哈希码),HashMap 使用链地址法(chaining)解决冲突,即将冲突的键值对链接在一个链表上。从Java 8开始,当链表长度超过一定阈值时,链表会转换成红黑树以提高查询效率。

性能考量

  • 初始容量和加载因子:创建 HashMap 时可以指定其初始容量和加载因子。加载因子是 HashMap 在扩容之前允许的最大填充比例,默认值为0.75。较高的加载因子意味着空间利用率更高,但可能导致更多的哈希冲突,影响性能。
  • 扩容操作:当 HashMap 中的元素数量超过了容量乘以加载因子的数量时,HashMap 会自动扩容,通常扩大两倍,并重新计算所有现有元素的位置(rehashing),这是一个相对耗时的操作。

HashMap 是非常灵活和高效的工具,适用于多种场景,尤其是在需要频繁地进行查找、插入和删除操作的情况下。然而,在特定的应用场景下,如需要保持插入顺序或有序遍历等,可能需要考虑其他类型的集合,例如 LinkedHashMapTreeMap

http://www.lryc.cn/news/580272.html

相关文章:

  • RabbitMQ 高级特性之死信队列
  • 【python深度学习】Day 59 经典时序预测模型3——SARIMA
  • Day05: Python 中的并发和并行(1)
  • SpringAIAlibaba正式版发布!
  • Python-GUI-wxPython-布局
  • 汽车功能安全概念阶段开发【相关项定义HARA】2
  • VS CodeC51 单片机开发环境搭建
  • 【AI大模型面试八股文】大模型训练中如何应对灾难性遗忘问题?
  • Cookie + Session
  • suricata新增协议处理流程
  • 数据结构与算法:贪心(三)
  • 图灵完备之路(数电学习三分钟)----数据选择器与总线
  • 《设计模式之禅》笔记摘录 - 3.工厂方法模式
  • c语言中的函数IV
  • 利用TCP协议,创建一个多人聊天室
  • 关于python
  • NumPy-核心函数np.dot()深入理解
  • 物联网中的Unity/Unreal引擎集成:数字孪生与可视化控制
  • 免费PDF处理软件,支持多种操作
  • 转Go学习笔记
  • 项目中大表治理方案实践
  • Dash 安装使用教程
  • 遗传算法的原理与实现示例
  • Kotlin 安装使用教程
  • windows11下启动 rqt 时报错:This application failed to start...... 的解决方法
  • CSS——圆形头像外嵌光圈
  • JavaWeb笔记05
  • 【ACP】阿里云云计算高级运维工程师--ACP
  • 力扣:70. 爬楼梯
  • [C++] # 深入理解C++继承:从原理到实现