哈希映射的副本

时间:2012-05-02 11:47:01

标签: java hashmap clone

我有Hashmap <integer, Arraylist<Double>>。我想复制一份。我在考虑使用hashmap的方法clone。经过javadoc后,它 说以下内容:

clone
Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned. 

这个浅拷贝是什么意思?我想要一个单独的矩阵,其值在更新原始矩阵的值时不会改变。

此外,为什么,

    if( hm1 == hm1.clone()) 

返回false?

2 个答案:

答案 0 :(得分:8)

浅拷贝意味着只创建了新的地图对象,但没有克隆其值,即拷贝包含对旧条目的引用。因此,要“深度克隆”您需要执行的地图:

  1. 创建一个新的哈希映射对象
  2. 迭代旧地图中的所有条目,并将键和值的(深)克隆添加到新地图
  3. 因为==比较了对象引用,而不是地图的内容。

答案 1 :(得分:0)

Map包含键(在您的情况下为整数实例)和值(ArrayLists)。在克隆的地图中,所有键和值都是相同的实例。

E.g。你有 整数k1 = new Integer(1); Arraylist value1 = new Arraylist();

originalMap.put(k1,value1);

在clonedMap中,所有唯一的键是最初为k1创建的相同实例。价值相同。