我已創建HashMap<String,List<Integer>>
。現在我想通過替換第一張地圖上的鍵和值來創建反向HashMap<Integer,List<String>>
。如何反轉HashMap的鍵和值?
例如
原始HashMap中:{ A=[2,1], B=[1,3,4], C=[5], D=[3], E=[2,4] }
反轉HashMap中:{ 1=[A,B], 2=[A,E], 3=[B,D], 4=[B,E], 5=[C] }
我已創建HashMap<String,List<Integer>>
。現在我想通過替換第一張地圖上的鍵和值來創建反向HashMap<Integer,List<String>>
。如何反轉HashMap的鍵和值?
例如
原始HashMap中:{ A=[2,1], B=[1,3,4], C=[5], D=[3], E=[2,4] }
反轉HashMap中:{ 1=[A,B], 2=[A,E], 3=[B,D], 4=[B,E], 5=[C] }
實現以下僞代碼:
Parameter: original map OM
Let RM be an empty map.
For all String S in OM:
For all integer I in the OM[S]:
If RM do not contains I:
Let RM[I] be an empty list.
Add S to RM[I].
Return RM.
嘗試此。
HashMap<Integer,List<String>> reverse = new HashMap<>(original.size());
for(HashMap.Entry<String,List<Integer>> entry : original) {
for(Integer n : entry.getValue()) {
if(!reverse.containsKey(n)) { //Reverse doesn't have this number yet, create a new list at that key.
reverse.add(n,new ArrayList<>());
}
reverse.get(n).add(entry.getKey());
}
}
讓我知道是否有一些錯誤,但先修補它!
HashMap<String, List<Integer>> hMap=new HashMap<String, List<Integer>>();
hMap.put("A",new ArrayList<Integer>(Arrays.asList(2,1)));
hMap.put("B",new ArrayList<Integer>(Arrays.asList(1,3,4)));
hMap.put("C",new ArrayList<Integer>(Arrays.asList(5)));
hMap.put("D",new ArrayList<Integer>(Arrays.asList(3)));
hMap.put("E",new ArrayList<Integer>(Arrays.asList(2,4)));
//Original HashMap: { A=[2,1], B=[1,3,4], C=[5], D=[3], E=[2,4] }
//Reversed HashMap: { 1=[A,B], 2=[A,E], 3=[B,D], 4=[B,E], 5=[C] }
HashMap<Integer,List<String>> result = new HashMap<>(hMap.size());
for(Map.Entry<String,List<Integer>> entry : hMap.entrySet()) {
for(Integer n : entry.getValue()) {
if(!result.containsKey(n)) {
result.put(n,new ArrayList<String>());
}
result.get(n).add(entry.getKey());
}
}
System.out.println(hMap);
System.out.println(result);
輸出
{d = [3],E = [2,4],A = [2,1],B = [1,3,4],C = [ 5]}
{1 = [A,B],2 = [E,A],3 = [d,B],4 = [E,B],5 = [C]}
什麼你的代碼有問題嗎?你不要求我們爲你寫,對吧:) – Pshemo
我相信你的意思是反轉,回覆意味着「回到以前的狀態」 –
創建一個新的'Map>'和循環。兩次。完成。 –