2016-04-03 6 views
-1

У меня есть два HashMaps.Как добавить HashMap в HashMap HashMaps без его перезаписывания

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

У меня есть цикл, который обновляет внутреннее с каждой итерации

inner.put(word, docEnum.freq()); 

После каждой итерации я добавить внутренней к наружной помощью глобальной переменной (общественности статической HashMap tempMap = NULL;)

 tempMap = inner; 
     outer.put(count, tempMap); 
     count++; 

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

Thanks

+0

Вы понимаете, что вы просто храните ** ссылки ** в своей HashMap, правильно? Если вы хотите, чтобы каждый был другим, вам нужно будет явно скопировать. –

+0

Не делайте 'tempMap = new Hashmap', вероятно, правильным решением, но, не показывая [mcve], сложно понять, что вы делаете и почему оно не работает –

ответ

0

Общая концепция java - это вызов по ссылке. Если вы не хотите перезаписывать информацию, вы должны копировать внутреннюю карту каждый раз или создавать новую.

0

Вы можете клонировать внутренний на каждой итерации. Но он будет потреблять больше памяти.

tempMap = inner; 
outer.put(count, tempMap.clone()); 
count++; 

Это потому, что tempMap сохраняется в HashMap по ссылке, а не в качестве отдельного объекта.

Смежные вопросы