哈希映射的副本

the*_*tna 0 java clone hashmap

我有一个Hashmap <integer, Arraylist<Double>>.我想复制一份.我在考虑使用clonehashmap的方法.经过javadoc后,它说:

clone
Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned. 
Run Code Online (Sandbox Code Playgroud)

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

为什么呢,

    if( hm1 == hm1.clone()) 
Run Code Online (Sandbox Code Playgroud)

返回false?

hag*_*age 8

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

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

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