2016-07-26 2 views
2

Я новичок в Java и то, что я хочу сделать, это поменять все ключи и значения HashMap (гм) в HashMap (HM2) и наоборот. Я не нашел решения по этому вопросу, возможно ли это?Могу ли я обменять ключи и значения HashMap на другие?

import java.util.*; 

class HashMapSwap{ 
public static void main(String args[]){ 
    HashMap<Integer, String> hm = new HashMap<Integer, String>(); 
    HashMap<Integer, String> hm2 = new HashMap<Integer, String>(); 

    hm.put(3, "Mobile"); 
    hm.put(11, "Tab"); 

    hm2.put(4, "PC"); 
    hm2.put(1, "Laptop"); 

    Map tmp = new HashMap(hm); 
    tmp.keySet().removeAll(hm2.keySet()); 
    hm2.putAll(tmp); 

    for(Map.Entry en:hm2.entrySet()){ 
     System.out.println(en.getKey() + " " + en.getValue()); 
    } 
} 
} 

O/P:

1 ноутбук

3 Мобильный

4 ПК

11 Вкладка

ответ

3
// store first map in (new) temporary map 
HashMap<Integer, String> tempMap = new HashMap<Integer, String>(hm); 

// clear first map and store pairs of hm2 
hm.clear(); 
hm.putAll(hm2); 

// clear second map and store pairs of tempMap 
hm2.clear(); 
hm2.putAll(tempMap); 

// EDIT (hint from Palcente) 
// optional: null the tempMap afterwards 
tempMap = null; 
+0

Отлично .. работает для меня –

+0

обнулить tempMap потом или держать его в стек – Palcente

+0

@Palcente: ТНХ за советом. Отредактирован ответ – TMichelsen

2

tmp может использоваться для замены ссылок, как показано ниже.

 HashMap<Integer, String> hm = new HashMap<Integer, String>(); 
     HashMap<Integer, String> hm2 = new HashMap<Integer, String>(); 

     hm.put(3, "Mobile"); 
     hm.put(11, "Tab"); 

     hm2.put(4, "PC"); 
     hm2.put(1, "Laptop"); 

     HashMap tmp = new HashMap(); 
     tmp = hm; 
     hm = hm2; 
     hm2 = tmp; 

     for(Map.Entry en:hm.entrySet()){ 
      System.out.println(en.getKey() + " " + en.getValue()); 
     } 
     for(Map.Entry en:hm2.entrySet()){ 
      System.out.println(en.getKey() + " " + en.getValue()); 
     } 
+0

Спасибо, он работает .. Но рекомендуется ли менять уникальные значения ключей? –

+0

Не уверен насчет вашего вопроса здесь, но IMO это лучше в случае временной сложности. – Jeet

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