Java 中克隆 HashMap

17 Mar 2025 | 5 分钟阅读

Java 中,HashMap 是一个基于 Hashtable 的实现。HashMap 的实现允许我们应用所有可选的 Map 操作,例如向 Map 添加数据、从 Map 删除数据、从 Map 检索键值、确定 Map 的大小等。除了这些,我们还可以创建 Map 的克隆或副本。在本节中,我们将学习如何在 Java 中克隆 HashMap

Java HashMap

Java HashMap 类实现了 Map 接口,允许我们存储键值对,其中键必须是唯一的。如果我们尝试插入重复键,它将替换相应键的元素。使用键索引执行更新、删除等操作非常容易。Java HashMap 类属于 java.util 包。

Java 中的 HashMap 类似于旧的 Hashtable 类,但它不同步。它允许我们存储 null 元素,但只能有一个 null 键。自 Java 5 起,它表示为 HashMap<K, V>,其中 K 代表键,V 代表值。它继承了 AbstractMap 类并实现了 Map 接口。

克隆 HashMap 的方法

在 Java 中克隆 Map 的方法如下:

  • 朴素解决方案
  • 使用 Map.putAll() 方法
  • 使用复制构造函数
  • 使用 Java 8 Stream
  • 使用 Google 的 JSON 库
  • 使用 HashMap.clone() 方法

朴素解决方案

这是克隆 HashMap 的最简单方法。在此方法中,我们遍历 HashMap 并为每个键值映射调用一次 put(k, v) 方法。让我们看一个相应的程序。

CloneHashMapExample1.java

输出

{Bangladesh=75, Sri Lanka=65, Nepal=76, India=101}

使用 Map.putAll() 方法

克隆 Map 的另一种方法是使用 putAll() 方法。它将原始 Map 中的所有映射复制到一个空 Map 中。

CloneHashMapExample2.java

输出

{M.Tech=60, MCA=90, B.Arch=200, B.Tech=120, B.Pharma=50}

使用复制构造函数

我们还可以使用复制构造函数来克隆 Map。在此方法中,使用 Map 的构造函数创建一个新对象作为现有对象的副本。

CloneHashMapExample3.java

输出

{Five=5, Two=2, Three=3, One=1, Four=4}

使用 Java 8 Stream

Java Stream API 也可用于克隆 HashMap。让我们看一个例子。

CloneHashMapExample4.java

输出

{Mac Book=67000.0, Dell PC=34000.0, Acer Pro=55000.0, Asus Gaming Laptop=89000.0, HP Note Book=45000.0}

使用 Google 的 JSON 库

克隆 HashMap 的另一种方法是使用 Google 的 JSON 库。在此方法中,首先将 Map 转换为 JSON 字符串,然后再将 JSON 字符串转换回新的 Map 对象。它的工作方式与序列化对象在反序列化时不对原始对象保持引用相同。

CloneHashMapExample5.java

输出

{Java=7, Python=2, C++=9, COBOL=12, C#=4, Kotlin=4}

使用 HashMap.clone() 方法

Java HashMap 类提供了 clone() 方法,该方法返回 HashMap 实例的浅拷贝。请注意,键和值不会被克隆。HashMap 类的 clone() 方法覆盖了 AbstractMap<K, V> 的 clone() 方法。

语法

HashMap.clone() 方法示例

CloneHashMapExample6.java

输出

Initial Mappings are: {50=Papaya, 22=Grapes, 90=Pineapple, 13=Blue Barriers, 110=Apple}
The cloned map looks like this: {50=Papaya, 90=Pineapple, 13=Blue Barriers, 22=Grapes, 110=Apple}