Java 列表值的树映射构造函数

Java 列表值的树映射构造函数,java,list,constructor,treemap,Java,List,Constructor,Treemap,我有一个带有私有属性的Class1树映射树和其他,我想写一个构造函数Class1(Class1 copyOfClass1)。我应该显式地(例如,在一个循环中)创建树映射的列表值,还是使用this.tree=newtreemap(copyOfClass1.tree)这样做?如果使用this.tree=newtreemap(copyOfClass1.tree)它将与 this.tree=new TreeMap(); this.tree.putAll(copyOfClass1.tree) 但是,它不

我有一个带有私有属性的
Class1
树映射树和其他,我想写一个构造函数
Class1(Class1 copyOfClass1)
。我应该显式地(例如,在一个循环中)创建
树映射的
列表
值,还是使用
this.tree=newtreemap(copyOfClass1.tree)
这样做?

如果使用
this.tree=newtreemap(copyOfClass1.tree)
它将与

this.tree=new TreeMap();
this.tree.putAll(copyOfClass1.tree)
但是,它不会复制存储在地图中的列表。这些键将指向相同的列表

如果你不想要这种行为,我建议你对条目进行迭代并复制列表

    this.tree = new TreeMap<Long, List<Class2>>();
    for (Entry<Long, List<Class2>> entry : copyOfClass1.tree.entrySet()) {
        this.tree.put(entry.getKey(), new ArrayList<Class2>(entry.getValue()));
    }
this.tree=newtreemap();
for(条目:copyOfClass1.tree.entrySet()){
this.tree.put(entry.getKey(),newArrayList(entry.getValue());
}

您想要深度副本还是浅层副本?如果我使用的不是我创建的列表,而是另一个类,我需要这样做吗?我的意思是,只有原语类型是按值复制的?是的,你也需要这样做。关于“按值复制”:“Java总是按值传递。很难理解Java将对象作为按值传递的引用传递。”