2016-05-01 4 views
1

В следующем коде,Handling Карты Карты в Java

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")); 

Я получаю выход следующим образом:

One index for A: {A=1, C=0, D=1, E=1} 
One index for B: {A=1, C=0, D=1, E=1} 

где индекс 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} 
+0

Вы меняете объект, на который ссылаются два других объекта, его изменение повлияет на них обоих. Я думаю, для этого у вас должны быть две разные карты. – Maroun

ответ

4

Вы должны использовать разные карты для каждого ключа, в противном случае вы редактируете одну и ту же карту на обоих клавишах, и ясно, если вы измените один, изменения будут отражаться на другом, учитывая, что они являются одним и тем же объектом. Попробуйте следующее:

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); 
+0

Да, это я знаю. Но поскольку мне нужно назначать такие значения для lakhs переменных карты, я бы предпочел использовать одну переменную. В этом смысле, можете ли вы сказать мне, будет ли использование lakhs переменных будет потреблять огромный объем памяти или нет? –

+0

@ user3905866 Он будет потреблять память для каждой карты, но если вы хотите, чтобы у них были отдельные состояния, это единственный выбор. –

+1

@ user3905866 не беспокойтесь о памяти, главное в правильности. Вы просто не можете повторно использовать одну и ту же карту для разных наборов значений с перекрывающимися ключами. –