2015-09-14 91 views

回答

4

的方式之一,是讓你的地圖是這樣定義的:

Map<String,List<String>> multiValueMap = new HashMap(); 

或者,如果你不想重新發明輪子,然後使用Apache MultiMap

+0

或者使用Guava Multimap等於Apache,只是另一個庫。 http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html –

1

您將不得不改變數據結構來以這種方式存儲數據。使用HashMapArrayListSet根據您的需要)來執行此操作。

HashMap<Character, Integer> map = new HashMap<>(); 
map.put('A', 2); 
map.put('B', 1); 
map.put('c', 2); 

// SORTED 
HashMap<Integer, List<Character>> sortedMap = new HashMap<>(); 
ArrayList<Character> list = new ArrayList<>(); 
for(Map.Entry<Character, Integer> entry : map.entrySet()){ 
    list = sortedMap.get(entry.getValue()); 
    if(list == null){ 
     list = new ArrayList<>(); 
     entry.put(entry.getValue(), list); 
    } 
    list.add(entry.getKey()); 
} 
+0

'HashMap'是*不*排序映射。 ---爲什麼要調用'containsKey()'?只需調用'get()'並檢查'null',而不是需要2次哈希查找。 – Andreas

+0

@Andreas是的,你是對的。編輯。謝謝 – afzalex

-1

你剛纔創建HaspMap象下面這樣:

Map<Integer, List<String>> map1 = new HashMap<>(); 
ArrayList<String> al = new ArrayList<>(); 
al.add("B"); 
map1.put(1, al); 
al = new ArrayList<>(); 
al.add("A"); 
al.add("C"); 
map1.put(2, al); 
+0

這不會轉換OP已經擁有的'HashMap',並且將單值和'String'數組列表混合,因爲Object不是非常類型安全的, – Andreas

0

HashMap的逆轉

HashMap<String,Integer> aHM = new HashMap<String,Integer>(); 
HashMap<Integer,ArrayList<String>> aHMrev = new HashMap<Integer,ArrayList<String>>(); 
//HashMap Reversal 
for (String f : aHM.keySet()){ 
    if(aHMrev.get(aHM.get(f)) != null){ 
     ArrayList<String> al = aHMrev.get(aHM.get(f)); 
     al.add(f); 
     aHMrev.put(aHM.get(f), al); 
    } 
    else{ 
     ArrayList<String> al = new ArrayList<String>(); 
     al.add(f); 
     aHMrev.put(aHM.get(f), al); 
    } 
} 

aHM = [LMWEB1B-VMH.log=Group1,PLMWEB1E-VMH.csv=Group3, 
    LMWEB1A-VMH.log=Group1, 
    LMWEB1E-VMH.log=Group2, 
    PLMWEB1D-VMH.csv=Group3, 
    LMWEB1F-VMH.log=Group2, 
    PLMWEB1C-VMH.csv=Group3, 
    PLMWEB1A-VMH.csv=Group2, 
    PLMWEB1B-VMH.csv=Group3, 
    PLMDB1-VMH.csv=Group2, 
    LMWEB1D-VMH.log=Group1, 
    PLMWEB1F-VMH.csv=Group3, 
    LMWEB1C-VMH.log=Group1] 

    aHMrev = { 
    Group1=[LMWEB1B-VMH.log, LMWEB1A-VMH.log, LMWEB1D-VMH.log,LMWEB1C-VMH.log], 
    Group2=[LMWEB1E-VMH.log, LMWEB1F-VMH.log,PLMWEB1A-VMH.csv,PLMDB1-VMH.csv], 
    Group3=[D:\Trash\Logs\Perfmon\PLMWEB1E-VMH.csv,PLMWEB1D-VMH.csv,PLMWEB1C-VMH.csv,PLMWEB1B-VMH.csv,PLMWEB1F-VMH.csv]}