我正在使用嵌套的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)是小写字母。

10-08 12:31