《Java零基础教学》是一套深入浅出的 Java 编程入门教程。全套教程从Java基础语法开始,适合初学者快速入门,同时也从实例的角度进行了深入浅出的讲解,让初学者能够更好地理解Java编程思想和应用。
本教程内容包括数据类型与运算、流程控制、数组、函数、面向对象基础、字符串、集合、异常处理、IO 流及多线程等 Java 编程基础知识,并提供丰富的实例和练习,帮助读者巩固所学知识。本教程不仅适合初学者学习,也适合已经掌握一定 Java 基础的读者进行查漏补缺。
前言
身为一名 Java 开发者,我们经常会遇到需要存储键值对数据的场景,HashMap 就是这类数据存储的理想选择。它提供了高效的存储与查找机制,广泛应用于缓存、数据存储、配置管理等场景。今天,我们将深入探讨 HashMap 类的五个常用方法:put()、get()、remove()、containsKey() 和 keySet()。这些方法几乎是每个 Java 程序员必备的工具,掌握它们能让你在日常开发中游刃有余,不信你可以继续往下看。
摘要
HashMap ,它是一个基于哈希表实现的 Map 接口,它允许存储键值对数据,并且可以高效地进行增删查改操作。本文将重点讲解 HashMap 中的五个常用方法:put()(添加元素)、get()(获取元素)、remove()(删除元素)、containsKey()(检查是否包含某个键)、keySet()(获取所有键)。通过详细的代码示例和实际应用场景的分析,帮助你更好地理解这些方法,并能灵活运用它们。
简介
HashMap 是 java.util 包中的一个实现类,它实现了 Map 接口,并使用哈希表来存储键值对。与 TreeMap 不同,HashMap 不保证顺序,这意味着它不维护键值对的顺序。HashMap 通过键的哈希值来定位数据,因此在大多数情况下,它具有常数时间的查找性能。
今天,我们将重点介绍以下几个常用方法:
put():向HashMap中插入键值对。get():根据键获取对应的值。remove():根据键删除对应的键值对。containsKey():检查HashMap中是否包含指定的键。keySet():获取HashMap中所有的键。
通过这些方法,HashMap 能够提供高效的存取操作,满足各种场景的需求。
概述
1. put()
put() 方法用于将指定的键值对插入到 HashMap 中。如果键已经存在,put() 会覆盖原有的值,并返回被替换的旧值。如果键不存在,则会插入新的键值对。
示例代码:
java
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
System.out.println(map); // 输出:{apple=10, banana=20}
解释 :将 "apple" 和 "banana" 两个键值对插入 HashMap 中,插入后可以直接打印输出。
2. get()
get() 方法用于根据键获取对应的值。如果指定的键存在,返回其对应的值;如果不存在,返回 null。
示例代码:
java
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
int appleCount = map.get("apple");
System.out.println("Apple count: " + appleCount); // 输出:Apple count: 10
解释 :通过 get("apple") 获取键为 "apple" 对应的值。
3. remove()
remove() 方法根据键删除对应的键值对。如果指定的键存在,删除并返回该键对应的值;如果键不存在,返回 null。
示例代码:
java
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
map.remove("banana");
System.out.println(map); // 输出:{apple=10}
解释 :通过 remove("banana") 删除键为 "banana" 的键值对。
4. containsKey()
containsKey() 方法用于检查 HashMap 中是否包含指定的键。如果包含,返回 true;否则返回 false。
示例代码:
java
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
boolean hasApple = map.containsKey("apple");
System.out.println("Contains 'apple': " + hasApple); // 输出:Contains 'apple': true
解释 :通过 containsKey("apple") 检查 HashMap 中是否包含键 "apple"。
5. keySet()
keySet() 方法返回 HashMap 中所有的键,以 Set 集合的形式返回。这对于遍历所有键非常有用。
示例代码:
java
HashMap<String, Integer> map = new HashMap<>();
map.put("apple", 10);
map.put("banana", 20);
map.put("cherry", 30);
System.out.println(map.keySet()); // 输出:[apple, banana, cherry]
解释 :通过 keySet() 获取 HashMap 中的所有键。
核心源码解读
HashMap 类的实现基于哈希表,其中每个键都通过哈希函数计算一个哈希值,用来定位数据存储的位置。具体来说:
put()方法通过计算键的哈希值,将键值对插入到哈希表的对应位置。get()方法通过计算键的哈希值,查找对应的键值对。remove()方法通过计算键的哈希值,找到并删除指定的键值对。containsKey()方法通过计算键的哈希值,检查哈希表中是否存在该键。keySet()方法遍历整个哈希表,返回所有键。
HashMap 的这些操作通常具有常数时间复杂度(O(1)),但在最坏的情况下,哈希冲突严重时,时间复杂度可能退化为 O(n)。
案例分析
假设我们正在开发一个库存管理系统,需要使用 HashMap 来存储商品的库存信息。每个商品的名称作为键,对应的库存数量作为值。通过这些常用方法,我们可以轻松实现库存的管理和查询。
java
public static void main(String[] args) {
// 创建库存管理的 HashMap
HashMap<String, Integer> inventory = new HashMap<>();
// 添加商品库存
inventory.put("apple", 50);
inventory.put("banana", 30);
inventory.put("orange", 20);
// 获取某个商品的库存
System.out.println("Apple stock: " + inventory.get("apple"));
// 删除某个商品的库存
inventory.remove("banana");
System.out.println("After removing banana: " + inventory);
// 检查某个商品是否存在
System.out.println("Contains 'orange': " + inventory.containsKey("orange"));
// 获取所有商品的名称
System.out.println("Product names: " + inventory.keySet());
}
输出结果:
json
Apple stock: 50
After removing banana: {apple=50, orange=20}
Contains 'orange': true
Product names: [apple, orange]
应用场景演示
1. 配置管理
假设我们要处理一个配置文件,每个配置项的名称为键,对应的配置值为值。我们可以使用 HashMap 来存储并快速获取配置项。
2. 缓存实现
在一些性能要求较高的场景中,我们可能需要实现缓存功能。HashMap 的高效查找特性使其成为缓存实现的理想选择。
3. 数据统计
HashMap 也可以用来统计某些数据出现的频率。例如,我们可以用它来统计单词在文本中的出现次数。
优缺点分析
优点:
- 高效 :
HashMap提供了常数时间的插入、删除和查找操作,在大多数情况下非常高效。 - 灵活:它可以存储任意类型的键值对,且键值对的插入顺序不固定,这使得它适用于各种场景。
- 支持 null 值 :
HashMap允许键和值为null,这在某些特定场景下非常有用。
缺点:
- 不保证顺序 :
HashMap不保证元素的顺序,如果需要保持元素的插入顺序,可以使用LinkedHashMap。 - 哈希冲突 :在哈希表的实现中,哈希冲突可能导致性能退化。虽然 Java 的
HashMap对冲突进行了优化,但在极端情况下,查找效率可能降低。
类代码方法介绍及演示
put():将指定的键值对插入到HashMap中。如果键已存在,更新值。get():根据键获取对应的值。如果键不存在,返回null。remove():删除指定键的键值对。containsKey():检查HashMap中是否包含指定的键。keySet():返回HashMap中所有键的集合。
测试用例
示例代码
接着,我给大家展示下,结合理论与实战给大家把知识点讲透,案例代码如下:
java
import java.util.HashMap;
/**
* @Author wf
* @Date 2025-04-13 18:30
*/
public class HashMapTest {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
// 测试 put() 方法
map.put("A", "Apple");
map.put("B", "Banana");
// 测试 get() 方法
System.out.println("Value for key A: " + map.get("A"));
// 测试 remove() 方法
map.remove("B");
// 测试 containsKey() 方法
System.out.println("Contains key B: " + map.containsKey("B"));
// 测试 keySet() 方法
System.out.println("Keys in the map: " + map.keySet());
}
}
输出预期结果
根据如上所给代码案例,预期输出结果如下:
json
Value for key A: Apple
Contains key B: false
Keys in the map: [A]
结果运行展示
根据如上案例,本地实际结果运行展示如下,仅供参考:

代码解析
根据如上我所给出的案例demo,着重进行代码解析,希望能够辅助大家理解。如上这段示例我主要展示了 HashMap 类的基本操作。HashMap 是一个基于哈希表实现的 Map 接口,它存储键值对(key-value pairs),并允许通过键(key)来快速查找值(value)。下面是每个方法的解析,仅供参考:
1. HashMap<String, String> map = new HashMap<>();
- 这行代码创建了一个空的
HashMap,它将字符串类型的键映射到字符串类型的值。初始化时没有指定初始容量,HashMap会根据需要动态调整容量。
2. map.put("A", "Apple");
put(K key, V value)方法用于向HashMap中添加一个键值对。在这里,键"A"映射到值"Apple"。如果键"A"已经存在,put方法会更新其对应的值。
3. map.put("B", "Banana");
- 再次使用
put()方法,将键"B"映射到值"Banana"。
4. System.out.println("Value for key A: " + map.get("A"));
get(Object key)方法根据指定的键返回对应的值。在这里,通过键"A"获取对应的值"Apple",并将其打印出来。
5. map.remove("B");
remove(Object key)方法用于移除指定键的键值对。这里通过键"B"删除了映射"B" -> "Banana"的键值对。
6. System.out.println("Contains key B: " + map.containsKey("B"));
containsKey(Object key)方法检查HashMap中是否包含指定的键。如果存在返回true,否则返回false。在这里,检查"B"是否在map中,移除"B"后返回false。
7. System.out.println("Keys in the map: " + map.keySet());
keySet()方法返回HashMap中所有的键。它返回一个包含所有键的Set集合。在这里,map中剩下的键是"A",所以输出的将是{A}。
输出解析
-
Value for key A: Appleget("A")返回"Apple",打印出"Value for key A: Apple"。
-
Contains key B: falsecontainsKey("B")检查键"B"是否存在,移除后返回false,打印出"Contains key B: false"。
-
Keys in the map: [A]keySet()返回的是map中所有的键。经过删除"B"后,只剩下"A",所以输出键集合为[A]。
总结
通过这个示例,演示了 HashMap 常用的几个方法:
put():将键值对添加到HashMap中。get():通过键获取值。remove():删除指定的键值对。containsKey():检查HashMap中是否包含某个键。keySet():返回HashMap中所有的键。
小结
通过本文的学习,我们深入探讨了 HashMap 类的五个常用方法:put()、get()、remove()、containsKey() 和 keySet()。这些方法是我们在实际开发中非常常用的工具,掌握它们能够帮助我们高效地管理和操作键值对数据,在日常项目开发中也是有极为必要的提升。
总结
HashMap ,它是 Java 中非常强大的数据结构,它提供了高效的存储和查找机制。掌握其常用方法,能够帮助我们在开发中更加得心应手。如果你还不熟悉这些方法,赶紧动手练习一下吧!
寄语
我们作为开发者,目标是让代码不仅能运行,而且能高效、简洁地运行。通过 HashMap 类,我们能轻松处理大量的键值对数据,提升我们的工作效率。希望大家能在实践中多加运用这些方法,成为更优秀的开发者及开拓者,甚至开发比它还更有作用的类!
最后,大家如果觉得看了本文有帮助的话,麻烦给不熬夜崽崽点个三连(点赞、收藏、关注)支持一下哈,大家的支持就是我写作的无限动力。