2013-06-27 3 views
2

Здесь у меня есть два hashmaps dataz и screen_dataz. Я хочу скопировать screen_dataz в dataz.как скопировать один файл hashmap в другой hashmap

Я пытаюсь как это, но это не работает:

Object[] obj = new Object[5]; 
String[] strArray = new String[]{"Obj1","Array1","Converted1","To1","List1"}; 
String[] strArray1 = new String[]{"Obj2","Array2","Converted2","To2","List2"}; 
dataz.put(0,(Object[]) strArray); 
dataz.put(1,(Object[]) strArray1); 
// String dataString = (String) dataz; 
System.out.println(dataz); 


Object[] obj1= new Object[5]; 
String[] strArray2 = new String[]{"Obj3","Array3","Converted3","To3","List3"}; 
String[] strArray3 = new String[]{"Obj4","Array4","Converted4","To4","List4"}; 
screen_dataz.put(0,(Object[]) strArray2); 
screen_dataz.put(1,(Object[]) strArray3); 
System.out.println("copying screen dataz to dataz"); 
dataz.putAll(screen_dataz); 
+4

Пожалуйста, покажите определение '' dataz' и screen_dataz' и объяснить, что вы имеете в виду «это не работает». –

+0

Право, пока у нас не будет определения 'dataz', пара ответов ниже, возможно, неверна !!! –

ответ

2

Похоже, что это не работает, потому что вы используете одни и те же клавиши (0 и 1), как в dataz и в screen_dataz.

Согласно official javadoc, putAll «заменят любые отображения, которые эта карта была для любого из ключей в настоящее время в указанной карте.», Так что вы теперь теряете свои предыдущие объекты, содержащиеся в dataz.

5
Map tmp = new HashMap(patch); 
tmp.keySet().removeAll(target.keySet()); 
target.putAll(tmp); 

Для получения более подробной explanation

2

Это уже размещены here

Map tmp = new HashMap(patch); 
tmp.keySet().removeAll(target.keySet()); 
target.putAll(tmp); 
16

использования делают конструктора и Shallow его.

dataz = new HashMap<Key,val>(screen_dataz); 
+0

Это * может * быть решением. Но, возможно, 'dataz' уже имеет в нем полезные данные. Вероятно, стоит подождать, пока ОП определит вопрос более внимательно. –

+1

эй, do 'screen_dataz' и' dataz' относятся к тому же местоположению? Когда я попробовал это и удалив значения в 'dataz', также удалены значения из' screen_dataz'. Я действительно хочу скопировать значения из одной карты в новую карту, а не две переменные, относящиеся к одному и тому же местоположению. –

8

Вы можете просто construct новый:

dataz = new HashMap<Integer,Object>(screen_dataz); 
+3

избил вас на 6 секунд :) +1 :) –

+4

@Baadshah Я когда-нибудь отомщу! Muahaha – Maroun

+0

Насколько я могу судить, вы оба ворвались с чем-то, что может быть правильным. Но вы сделали большое предположение, что 'dataz' можно перезаписать. –

0
HashMap<String, String> hash1 = new HashMap(); 
    hash1.put("one", "the firs one"); 
    hash1.put("two", "the second one"); 
    hash1.put("three", "the third one"); 
    HashMap<String, String> hash2 = new HashMap<>(); 
    hash2.putAll(hash1); 
1

Попробуйте

HashMap<Integer,String> myMap=new HashMap<>(); 
    myMap.put(1,"A"); 
    myMap.put(2,"B"); 
    HashMap<Integer,String> newMap=new HashMap<>(); 
    newMap.putAll(myMap);