在 Java 中处理地图的地图

Kri*_*osh 2 java dictionary

在下面的代码中,

Map<String,Map<String,Integer>> one_index_1 = new HashMap<String,Map<String,Integer>>();
Map<String,Integer> term_index_1 = new HashMap<String,Integer>();
    term_index_1.put("B", 1);
    term_index_1.put("C", 1);
    term_index_1.put("D", 1);
    term_index_1.put("E", 1);
    one_index_1.put("A", term_index_1);
    term_index_1.clear();
    term_index_1.put("A", 1);
    term_index_1.put("C", 0);
    term_index_1.put("D", 1);
    term_index_1.put("E", 1);
    one_index_1.put("B", term_index_1);

    System.out.println("One index for A: " + one_index_1.get("A"));
    System.out.println("One index for B: " + one_index_1.get("B"));
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下:

One index for A: {A=1, C=0, D=1, E=1}
One index for B: {A=1, C=0, D=1, E=1}
Run Code Online (Sandbox Code Playgroud)

其中 A 的索引在插入 B 的值时被修改。在不使用另一个映射变量的情况下,我可以以某种方式保留映射的值以获得如下输出:

One index for A: {B=1, C=1, D=1, E=1}
One index for B: {A=1, C=0, D=1, E=1}
Run Code Online (Sandbox Code Playgroud)

Ósc*_*pez 5

您必须为每个键使用不同的映射,否则您将在两个键上编辑完全相同的映射,并且显然,如果您修改一个键,则更改将反映在另一个键上,因为它们是同一对象。尝试这个:

Map<String, Map<String, Integer>> one_index = new HashMap<String, Map<String, Integer>>();

Map<String, Integer> term_index = new HashMap<String, Integer>();
term_index.put("B", 1);
term_index.put("C", 1);
term_index.put("D", 1);
term_index.put("E", 1);
one_index.put("A", term_index);

term_index = new HashMap<String, Integer>();
term_index.put("A", 1);
term_index.put("C", 0);
term_index.put("D", 1);
term_index.put("E", 1);
one_index.put("B", term_index);
Run Code Online (Sandbox Code Playgroud)

  • @user3905866 不要担心内存,重要的是正确性。您根本无法对具有重叠键的不同值集重复使用相同的映射。 (3认同)