我正在使用嵌套的TreeMap
[UserMap [LibraryMap [BookMap]]
当我使用BookMap.clear()而不是new时,它将清除所有数据,并且我保留了BookMap中最后输入的2个数据。我需要创建新对象吗?我希望在添加第一个BookMap并清除后不会影响LibraryMap,但确实会这样做。
TreeMap<Integer, Integer> BookMap = new TreeMap<Integer, Integer>();
TreeMap<Integer, TreeMap<Integer, Integer>> LibraryMap = new TreeMap<Integer, TreeMap<Integer, Integer>>();
TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>> UserMap = new TreeMap<Integer, TreeMap<Integer, TreeMap<Integer, Integer>>>();
// Adding data to a tree map
BookMap.put(1, 2000);
BookMap.put(2, 2000);
BookMap.put(3, 2003);
LibraryMap.put(1,BookMap);
//BookMap.clear();
BookMap = new TreeMap<Integer, Integer>();
BookMap.put(4, 2006);
BookMap.put(5, 2007);
LibraryMap.put(2,BookMap);
BookMap= new TreeMap<Integer, Integer>();
BookMap.put(6,2009);
BookMap.put(7, 2012);
LibraryMap.put(3,BookMap);
UserMap.put(1,LibraryMap);
最佳答案
如果要将新的BookMap关联到LibraryMap中的新键,则需要创建一个新的键。
如果使用clear,则变量BookMap仍然是对与LibraryMap中的键1关联的实例的引用。换一种说法:
LibraryMap.put(1,BookMap);
BookMap.clear(); //still the same instance as 1-line above
BookMap.put(4, 2006); // still the same
BookMap.put(5, 2007); // ...
LibraryMap.put(2,BookMap); // LibraryMap.get(1) and .get(2) will return the same instance
顺便说一句,不相关,但是对变量名使用大写字母是错误的:约定对于Classs是大写字母,对于变量(bookMap)是小写字母。