Clear 方法删除所有 Hashmap 对象中的所有链接
Clear method removes all links in all Hashmap's objects
当我清理内部地图时看到这一点时,我很震惊,之前将它添加到外部地图。有什么方法可以重置内部地图但不从外部地图中删除对象?
主要class:
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 ?
}
人:
public class Person {
private String id;
private String name;
private int age;
private boolean isSome;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSome() {
return isSome;
}
public void setSome(boolean isPaid) {
this.isSome = isPaid;
}
public Person(){}
public Person(String id, String name, int age, boolean isSome){
this.id = id;
this.name = name;
this.age = age;
this.isSome = isSome;
}
}
outer.put(1000, inner);
将 inner
变量中包含的引用作为值放在外部 Map 中。它不会创建 inner
引用的实例的副本,因此如果您稍后清除 inner
映射,您也会清除存储在外部映射中的值。
如果你希望外层Map的值是原始内层Map的副本,你可以创建一个新实例:
outer.put(1000, new HashMap<Integer, Person>(inner));
请注意,在这种情况下,新内部 Map 中的 Person
个实例将与原始 inner
Map 的原始 Person
个实例相同,因此如果您改变其中之一,存储在 Map 中的实例也会发生变异。
当我清理内部地图时看到这一点时,我很震惊,之前将它添加到外部地图。有什么方法可以重置内部地图但不从外部地图中删除对象?
主要class:
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 ?
}
人:
public class Person {
private String id;
private String name;
private int age;
private boolean isSome;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isSome() {
return isSome;
}
public void setSome(boolean isPaid) {
this.isSome = isPaid;
}
public Person(){}
public Person(String id, String name, int age, boolean isSome){
this.id = id;
this.name = name;
this.age = age;
this.isSome = isSome;
}
}
outer.put(1000, inner);
将 inner
变量中包含的引用作为值放在外部 Map 中。它不会创建 inner
引用的实例的副本,因此如果您稍后清除 inner
映射,您也会清除存储在外部映射中的值。
如果你希望外层Map的值是原始内层Map的副本,你可以创建一个新实例:
outer.put(1000, new HashMap<Integer, Person>(inner));
请注意,在这种情况下,新内部 Map 中的 Person
个实例将与原始 inner
Map 的原始 Person
个实例相同,因此如果您改变其中之一,存储在 Map 中的实例也会发生变异。