як копіювати вміст хеш-карти в іншу хеш-карту

Тут я маю два хеш-карти dataz і screen_dataz . Я хочу скопіювати screen_dataz до dataz .

Я намагаюся, але це не працює:

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);
2
Право, поки ми не отримаємо визначення dataz , кілька відповідей нижче, можливо, помилкові !!!
додано Автор Mukul Goel, джерело
Покажіть визначення dataz і screen_dataz і поясніть, що ви маєте на увазі під "це не працює".
додано Автор Duncan Jones, джерело

7 Відповіді

Використовуйте конструктор і Shallow it.

dataz = new HashMap(screen_dataz);
16
додано
Це може бути рішенням. Але, можливо, dataz вже має деякі корисні дані. Напевно, варто чекати, поки ОП не визначить питання більш уважно.
додано Автор Duncan Jones, джерело
Так, screen_dataz і dataz відносяться до того самого місця? Коли я спробував це і видалив значення в dataz , також видалені значення з screen_dataz . Я дійсно хочу скопіювати значення з однієї карти на нову карту, а не дві змінні, що посилаються на одне і те ж місце.
додано Автор Ram Patra, джерело

Ви можете просто побудувати нове:

dataz = new HashMap(screen_dataz);
8
додано
бити вас на 6 сек :) +1 :)
додано Автор ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, джерело
Термін Копіювання змусив мене опублікувати це.
додано Автор ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ, джерело
@Baadshah Я візьму мою помсту коли-небудь! Муахаха
додано Автор Maroun, джерело
@DuncanJones З тієї ж причини змусив мене розмістити відповідь теж :) Але, можливо, ви маєте рацію.
додано Автор Maroun, джерело
Наскільки я можу сказати, ви обидва кинулися в щось, що може бути правильним. Але ви зробили велике припущення, що dataz може бути перезаписаний.
додано Автор Duncan Jones, джерело
Map tmp = new HashMap(patch);
tmp.keySet().removeAll(target.keySet());
target.putAll(tmp);

For detailed explanation

5
додано

Схоже, він не працює, тому що ви використовуєте ті ж ключі (0 і 1) як у dataz , так і в screen_dataz .

Відповідно до офіційний javadoc , putAll "замінить будь-які відображення, які ця карта мала для будь-якої з ключів, які наразі знаходяться на вказаній карті.", тому ви втрачаєте свої попередні об'єкти, що містяться в dataz .

2
додано

It's already posted here

Map tmp = new HashMap(patch);
tmp.keySet().removeAll(target.keySet());
target.putAll(tmp);
2
додано

Спробуйте це

    HashMap myMap=new HashMap<>();
    myMap.put(1,"A");
    myMap.put(2,"B");
    HashMap newMap=new HashMap<>();
    newMap.putAll(myMap);
1
додано
HashMap hash1 = new HashMap();
    hash1.put("one", "the firs one");
    hash1.put("two", "the second one");
    hash1.put("three", "the third one");
    HashMap hash2 = new HashMap<>();
    hash2.putAll(hash1);
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників