Java Clear方法删除所有Hashmap';s对象

Java Clear方法删除所有Hashmap';s对象,java,Java,当我在早些时候将内部地图添加到外部地图后,清理内部地图时,我震惊了。有没有办法重置内部贴图,但不从外部贴图中移除对象 主要类别: public static void main(String args[]) { Person per1 = new Person("1", "aaa",56, true); Person per2 = new Person("20", "bbb",34, false); Map<Integer, Map<

当我在早些时候将内部地图添加到外部地图后,清理内部地图时,我震惊了。有没有办法重置内部贴图,但不从外部贴图中移除对象

主要类别:

public static void main(String args[]) {
        Person per1 = new Person("1", "aaa",56, true);
        Person per2 = new Person("20", "bbb",34, false);

        Map<Integer, Map<Integer, Person>> outer = new HashMap<Integer, Map<Integer, Person>>();

        Map<Integer, Person> inner = new HashMap<Integer, Person>();

        inner.put(100, per1);
        inner.put(200, per2);

        outer.put(1000, inner);
        // inner: size = 2 , outer: size = 1 (key = 1000, value size = 2)
        inner.clear();
        // inner: size = 0 , outer: size = 1 (key = 1000, value size = 0) 
        // why outer value size = 0 ?
}
outer.put(1000,inner)
内部变量中包含的引用作为值放在外部映射中。它不会创建
内部
引用的实例的副本,因此如果稍后清除
内部
映射,也会清除存储在外部映射中的值

如果希望外部贴图的值是原始内部贴图的副本,可以创建一个新实例:

outer.put(1000, new HashMap<Integer, Person>(inner));
outer.put(1000,新的HashMap(inner));

请注意,在这种情况下,新内部映射中的
Person
实例将与原始
internal
映射中的原始
Person
实例相同,因此如果您对其中一个实例进行变异,则存储在映射中的实例也将发生变异

补充答案:您可以使用如下内容:
outer.put(1000,newhashmap(inner))@pL4Gu33我刚刚添加了:)
outer.put(1000, new HashMap<Integer, Person>(inner));