有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

hashmap的java副本

我有一个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) 个答案

  1. # 1 楼答案

    浅复制意味着只有地图对象被创建为新对象,但其值不会被克隆,即副本包含对旧条目的引用。因此,要“深度克隆”地图,您需要执行以下操作:

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

    因为==比较的是对象引用,而不是映射的内容

  2. # 2 楼答案

    Map有键(在您的例子中是整数实例)和值(ArrayList)。在克隆映射中,所有键和值都将是相同的实例

    你有 整数k1=新整数(1); Arraylist value1=新的Arraylist()

    原始地图。put(k1,value1)

    在clonedMap中,唯一的键是最初为k1创建的同一个实例。价值也一样