2012-02-26 27 views
0

的Hashmap如下圖所示創建我創建一個HashMap:使用現有的HashMap

Map<String, String> streetno = new HashMap<String, String>(); 

streetno.put("3", "Sachin"); 
streetno.put("2", "Dravid"); 
streetno.put("1", "Sehwag"); 
streetno.put("5", "Laxman"); 
streetno.put("4", "Kohli"); 

現在我想創建一個新的HashMap,其中上述的HashMap的關鍵變成使用價值和價值成爲關鍵,如下圖所示:

Map<String, String> streetname = new HashMap<String, String>(); 

streetname.put("Sachin", "3"); 
streetname.put("Dravid", "2"); 
streetname.put("Sehwag", "1"); 
streetname.put("Laxman", "5"); 
streetname.put("Kohli", "4"); 

我不知道該怎麼做..任何人都可以幫助我走出這個..

+1

請注意,番石榴,谷歌集合api,支持BiMap的概念,支持'inverse()'操作來做到這一點。有用的是它沒有複製數據。請參閱[這裏](http://docs.guava-libraries.googlecode.com/git-history/v11.0.1/javadoc/com/google/common/collect/BiMap.html#inverse())瞭解詳細信息 – sw1nn 2012-02-26 14:33:07

回答

4
Map<String, String> streetname = new HashMap<String, String>(); 

for (Entry<String,String> e : streetno.entrySet()) { 
    streetname.put(e.getValue(), e.getKey()); 
} 

這裏,for循環遍歷所有條目(即鍵/值對),並將它們插入到第二個映射中,並將鍵和值交換。

檢查put()返回null可能是一個好主意。如果您得到一個非空值,這意味着streetno中的值不是唯一的。既然這是作業,我會讓你找出結果,以及如何最好地處理這個問題。

+2

啊!當有人解決作業時,我不喜歡它。幫助一下,但不要做所有的工作。畢竟這是作業,這樣學生會付出一些努力。 – 2012-02-26 14:29:24

+2

我希望你的原創價值是獨一無二的;否則你失去了數據 – Tom 2012-02-26 14:29:27

2

完美的你幾乎在那裏。現在,你需要遍歷第一哈希映射按鍵和模擬你在這5行做了什麼:

streetname.put("Sachin", "3"); 
streetname.put("Dravid", "2"); 
streetname.put("Sehwag", "1"); 
streetname.put("Laxman", "5"); 
streetname.put("Kohli", "4"); 

提示:遍歷所有的地圖可能是你有點棘手,但通常是這樣完成的:

for (String key : streetno.keySet()) { 
... 
} 

祝您的作業順利!

+0

你不知名的downvoter,我做了什麼壞事? – 2012-02-26 14:32:45

+1

我沒有倒下你,但是...也許downvoter冒犯了'streetno.keySet()'你真的應該使用'streetno.entrySet()',否則你將不得不再次訪問地圖以獲取價值。 – 2012-02-26 14:36:14

+0

這是真的,可能會慢一點,但我認爲這對於作業來說足夠好。我想避免'entrySet',因爲我害怕我會混淆學生(我不知道他的專業水平)。即使使用我的解決方案,複雜度仍然保持O(n)。 – 2012-02-26 14:39:25

0

的Java 8:

Map<String, String> streetname = 
    streetno.entrySet() 
      .stream() 
      .collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey)); 

注:

如果你想使用的parellelstream()代替stream()三思而後行。這隻適用於你的Map非常大。