0

我有一个Hashmap <integer, Arraylist<Double>>. 我想复印一份。我正在考虑使用clonehashmap的方法。在通过 javadoc 之后,它说以下内容:

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

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

而且为什么,

    if( hm1 == hm1.clone()) 

返回假?

4

2 回答 2

8

浅拷贝意味着只有映射对象是新创建的,但它的值没有被克隆,即拷贝包含对旧条目的引用。所以要“深度克隆”你需要做的地图:

  1. 创建一个新的哈希映射对象
  2. 遍历旧地图中的所有条目,并将键和值的(深度)克隆添加到新地图

因为==比较的是对象引用,而不是地图的内容。

于 2012-05-02T11:50:58.697 回答
0

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

例如,您有 Integer k1=new Integer(1); Arraylist 值1=新的 Arraylist();

originalMap.put(k1, value1);

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

于 2012-05-02T11:53:15.860 回答