Java HashMap2025年4月1日 | 阅读14分钟 Java HashMap 类实现了 Map 接口,允许我们存储键值对,其中键应该是唯一的。如果您尝试插入重复键,它将替换相应键的元素。使用键索引进行更新、删除等操作非常方便。HashMap 类位于 java.util 包中。 Java 中的 HashMap 类似于旧的 Hashtable 类,但它不是同步的。它也允许我们存储 null 元素,但只能有一个 null 键。从 Java 5 开始,它表示为 HashMap<K,V>,其中 K 代表键,V 代表值。它继承了 AbstractMap 类并实现了 Map 接口。 注意事项
HashMap 的属性
HashMap 类层次结构![]() 如上图所示,HashMap 类扩展了 AbstractMap 类并实现了 Map 接口。 HashMap 类声明让我们看一下 java.util.HashMap 类的声明。 HashMap 类参数让我们看一下 java.util.HashMap 类的参数。
Java HashMap 类的构造函数
Java HashMap 类的方法
Java HashMap 示例让我们看一个存储键值对的简单 HashMap 示例。 示例编译并运行输出 Iterating Hashmap... 1 Mango 2 Apple 3 Banana 4 Grapes 说明 提供的 Java 代码初始化了一个名为 map 的 HashMap,它被参数化以接受 Integer 键和 String 值。然后使用 put 方法将四个键值对添加到 HashMap 中,将整数 1 到 4 与相应的 фрукты 名称('Mango', 'Apple', 'Banana', and 'Grapes')关联起来。随后,一个循环使用 entrySet() 方法遍历 HashMap 的条目,并将每个键值对打印到控制台。 HashMap 中没有重复键我们不能在 HashMap 中存储重复键。但是,如果我们尝试用另一个值存储重复键,它将替换该值。 由于这种行为,HashMap 保证保留键和值之间的一对一映射,其中每个键和值都由唯一标识。同样重要的是要记住,HashMap 允许 null 值,但只能存在一个 null 键。在 HashMap 数据结构中,这种对键的唯一限制使得能够快速检索和操作键值对。 示例编译并运行输出 Iterating Hashmap... 1 Grapes 2 Apple 3 Banana 说明 提供的 Java 代码初始化了一个名为 map 的哈希映射,将 String 值映射到 Integer 键。使用 put 方法,将四个键值对(每个代表一个水果及其匹配的标识符)添加到 HashMap 中。有趣的是,代码通过尝试引入具有不同值(“Grapes”)的重复键(1)来替换与键 1 关联的值(“Mango”)。 Java HashMap 添加元素的示例有以下几种方法可以在 HashMap 中添加元素 1. 使用 put() 方法 使用 put() 方法将键值对插入到 HashMap 中。如果指定的键已存在,则覆盖相关值中的新值。 2. 使用 putIfAbsent() 方法 putIfAbsent() 方法仅在给定键尚不存在时才将键值对添加到 HashMap 中。 3. 使用 putAll() 方法 使用 putAll() 方法将一个 HashMap 中的所有键值对复制到另一个 HashMap 中。指定映射中的所有组件都添加到活动映射中。 这些技术使 Java 程序员能够灵活地向 HashMap 添加条目,从而有效地操作和组织键值数据结构。 让我们在 Java 程序中实现以上所有方法。 示例编译并运行输出 Initial list of elements: {} After invoking put() method 100 Amit 101 Vijay 102 Rahul After invoking putIfAbsent() method 100 Amit 101 Vijay 102 Rahul 103 Gaurav After invoking putAll() method 100 Amit 101 Vijay 102 Rahul 103 Gaurav 104 Ravi 说明 提供的 Java 代码创建了一个名为 hm 的哈希映射,其键值对分别为 String 和 Integer。然后,使用 put() 方法向此 HashMap 添加新元素。接着,如果给定键尚未与值关联,则使用 putIfAbsent() 函数添加键值对。然后,使用 putAll() 方法将 hm 中的所有组件添加到 map 中,从而创建一个名为 map 的新 HashMap。 Java HashMap 删除元素的示例1. remove(Object key) 如果 HashMap 中存在给定键的映射,则将其删除。返回与键对应的键,如果键不存在,则返回 null。 2. remove(Object key, Object value) 仅当提供的键当前映射到指定值时,才会删除该键的条目。如果删除成功,则返回 true,否则返回 false。 3. clear() 通过删除所有键值对来清空 HashMap。 示例编译并运行输出 Initial list of elements: {100=Amit, 101=Vijay, 102=Rahul, 103=Gaurav} Updated list of elements: {101=Vijay, 102=Rahul, 103=Gaurav} Updated list of elements: {102=Rahul, 103=Gaurav} Updated list of elements: {103=Gaurav} 说明 提供的 Java 代码初始化了一个名为“map”的哈希映射,其中包含整数键和字符串值。然后,它使用 put() 函数将多个键值对填充到映射中。然后使用 remove() 函数演示各种删除场景:首先,根据特定键删除一个条目 (map.remove(100));然后,删除一个基于值的条目 (map.remove(101));最后,根据键和值删除一个条目 (map.remove(102, "Rahul"))。为了反映每次删除操作后所做的修改,会输出哈希映射中条目的更新列表。 Java HashMap 替换元素的示例
示例编译并运行输出 Initial list of elements: 100 Amit 101 Vijay 102 Rahul Updated list of elements: 100 Amit 101 Vijay 102 Gaurav Updated list of elements: 100 Amit 101 Ravi 102 Gaurav Updated list of elements: 100 Ajay 101 Ajay 102 Ajay 说明 提供的 Java 代码初始化了一个名为“hm”的哈希映射,其中包含多个整数键和字符串值键值对。之后,它演示了哈希映射中替换元素的各种技术。首先,它使用 replace(K key, V value) 方法将与键 102 相关联的值替换为“Gaurav”。然后,使用 replace(K key, V oldValue, V newValue) 方法将与键 101 相关联的值从“Vijay”更改为“Ravi”。最后,它使用 replaceAll(BiFunction<K, V, V> function) 方法将 HashMap 中的所有值替换为“Ajay”。在每次替换操作之后,都会输出 HashMap 的更新条目列表。 HashSet 和 HashMap 之间的区别HashSet 只包含值,而 HashMap 包含条目(键和值)。
让我们看看 Java HashMap 程序。 示例编译并运行输出 1 Details: 101 Let us C Yashwant Kanetkar BPB 8 2 Details: 102 Data Communications and Networking Forouzan Mc Graw Hill 4 3 Details: 103 Operating System Galvin Wiley 6 说明 提供的 Java 代码演示了如何使用哈希映射存储和检索 Book 类的实例。它首先定义了 Book 类,该类有一个构造函数来初始化 id、name、author、publisher 和 quantity 属性。在 MapExample 类中,创建了一个带有整数键和 Book 值的哈希映射。代码使用不同的整数键将多个 Book 对象构造并添加到哈希映射中。接着,代码使用 for-each 循环遍历 HashMap 的条目集。代码检索每个条目的键和匹配的 Book 对象,并打印出每个 Book 的详细信息,包括其 id、name、author、publisher 和 quantity。 结论总而言之,Java HashMap 类提供了一个强大的工具来有效地存储键值对。当哈希函数将元素均匀地分布在存储桶中时,它为 put 和 get 等简单操作提供了常数时间性能。它便于根据键快速插入、检索和删除元素。HashMap 通过负载因子控制、自动重 sizing 和通过独立链表处理冲突等功能,为管理大型数据集提供了灵活性和可伸缩性。重要的是要记住,哈希映射不是同步的,因此在没有外部同步的情况下不适合并发访问。哈希映射是 Java 中的一种基本数据结构,它在各种编程环境中提供了一种灵活的方式来处理键值映射和关联数组。 相关主题Java HashMap 的工作原理 | HashMap 如何工作 Java HashMap 选择题1) 在平均情况下,get 方法提供什么样的性能?
答案:a) 解释:在平均情况下,由于高效的哈希机制将条目均匀地分布在存储桶中,get 方法提供常数时间性能,O(1)。 2) 如果两个对象根据 equals 方法是相等的,那么这些对象在 HashMap 中还必须满足什么条件?
答案:b) 解释:在 HashMap 中,如果两个对象根据 equals 方法是相等的,那么它们必须具有相同的 hashCode。这确保它们被放置在同一个存储桶中,使 HashMap 能够正确地识别和管理条目。 3) 使用哪个方法来检查 HashMap 中是否存在特定键?
答案:c) 解释:containsKey() 方法用于检查 HashMap 中是否存在特定键,如果键存在则返回 true。 4) 如果在 HashMap 中使用了 null 键,会发生什么?
答案:c) 解释:Java HashMap 允许一个 null 键并将其视为有效条目。null 键被映射到一个特定的存储桶,使其能够像任何其他键一样被存储和检索。 5) 使用哪个方法可以从 HashMap 中删除条目?
答案:b) 解释:remove 方法用于根据提供的键从 HashMap 中删除特定条目。它返回与键关联的值,如果键未找到则返回 null。 下一个主题HashMap 的工作原理 |
我们请求您订阅我们的新闻通讯以获取最新更新。