2016-11-28 53 views
0

的順序在Java中的HashMap和希望的HashSet下創建一個基於條目新LinkedHashMap的目前如何創建基於我有一個LinkedHashMap的HashSet的

import java.util.*; 

public class LinkedHashMapDemo { 

    public static void main(String args[]) { 
     // Currently empty 
     LinkedHashMap<String, String> newhashmap = new LinkedHashMap<String, String>(); 

     // old hash map 
     LinkedHashMap<String, String> oldhashmap = new LinkedHashMap<String, String>(); 

     // Put elements to the map 
     oldhashmap.put("Zara", "zaravalue"); 
     oldhashmap.put("Mahnaz", "Mahnazvalue"); 
     oldhashmap.put("Ayan", "Ayanvalue"); 
     oldhashmap.put("Daisy", "Daisyvalue"); 
     oldhashmap.put("Qadir", "Qadirvalue"); 

     HashSet<String> hs = new HashSet<String>(); 

     // add elements to the hash set 
     hs.add("Zara"); 
     hs.add("Ayan"); 
     hs.add("Qadir"); 

     Iterator iterator = hs.iterator(); 
     while (iterator.hasNext()) { 
      String key = (String) iterator.next(); 
      String val = oldhashmap.get(key); 
     } 
    } 
} 

,使新newhashmap外觀作爲

newhashmap.put("Zara", "Zaravalue"); 
newhashmap.put("Ayan", "Ayanvalue"); 
newhashmap.put("Qadir", "Qadirvalue"); 
newhashmap.put("Mahnaz", "Mahnazvalue"); 
newhashmap.put("Daisy", "Daisyvalue"); 

請讓我知道這可能

+2

您不能依賴HashSet或HashMap中元素的順序。 – Eran

+1

當你的HashSet只包含'Zara,Ayan,Qadir'基於哪個規則的條目'Mahnaz,Daisy'被添加到'newhashmap'? – SubOptimal

+0

@Eran這就是爲什麼他使用LinkedHashMap –

回答

2

你可以使用remove()方法如果你願意從舊的HashSet

while (iterator.hasNext()) { 
    String key = (String) iterator.next(); 
    String val = oldhashmap.remove(key); 
    newhashmap.put(key, val); 
} 
newhashmap.putAll(oldhashmap); 

你可能也想看看使用您希望的順序創建一個自定義Comparator一個TreeMap刪除,但是這可能有點過於複雜了你的榜樣。

編輯:您還需要將您的HashSet更改爲LinkedHashSet,以便您可以依靠排序。

1

我的第一種方法是這樣的:

... 
LinkedHashMap<String, String> storage = new LinkedHashMap<String, String>(); 

while (iterator.hasNext()) { 
    String key = (String) iterator.next(); 
    String val = oldhashmap.get(key); 
    if(hs.contains(val){ 
     newhashmap.put(key, val); 
    }else { 
     storage.put(key, val); 
    } 
} 
newhashmap.putAll(storage); 
... 

這樣就可以避免修改舊的HashMap或者通過數據迭代兩次。

相關問題