2013-06-27 6 views
2

Ici, j'ai deux hashmaps dataz et screen_dataz. Je veux copier screen_dataz à dataz.comment copier un contenu hashmap à un autre hashmap

Je suis en train comme ça, mais il ne fonctionne pas:

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

S'il vous plaît montrer la définition de '' dataz' et screen_dataz' et expliquer ce que vous entendez par « cela ne fonctionne pas ». –

+0

Droite, Jusqu'à ce que nous ayons la définition de 'dataz', quelques réponses ci-dessous sont sans doute fausses !!! –

Répondre

2

On dirait que cela ne fonctionne pas parce que vous utilisez les mêmes touches (0 et 1) à la fois dans dataz et screen_dataz.

Selon le official javadoc, putAll « remplacera toutes les correspondances que cette carte avait pour l'une des clés actuellement sur la carte spécifiée. », Vous perdez maintenant vos objets précédents contenus dans dataz.

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

Pour détaillée explanation

2

Il est déjà posté here

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

Faire usage du constructeur et Shallow il.

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

Cela peut être une solution. Mais peut-être 'dataz' contient déjà des données utiles. Cela vaut probablement la peine d'attendre que le PO définisse la question de plus près. –

+1

hey, do 'screen_dataz' et' dataz' se réfèrent au même endroit? Comme je l'ai essayé et en supprimant les valeurs dans 'dataz', j'ai également supprimé les valeurs de' screen_dataz'. Je veux réellement copier les valeurs d'une carte vers une nouvelle carte et non deux variables se référant au même emplacement. –

8

Vous pouvez simplement construct une nouvelle:

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

vous battre par 6 sec :) +1 :) –

+4

@Baadshah Je vais prendre ma revanche un jour! Muahaha – Maroun

+0

Pour autant que je sache, vous vous êtes précipités avec quelque chose qui pourrait être correct. Mais vous avez fait une grande supposition que 'dataz' peut être écrasé. –

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

Essayez cette

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