我有一個散列映射,我知道一些鍵映射到相同的值。
這些鍵的數量非常小(小於6%),它們映射在2-4個值之間。
例如有效的方法顛倒了映射到相同值的少數鍵映射hashmap
Map<String, String> map = new HashMap<>();
map.put("codeA", "100");
map.put("codeB", "7");
map.put("codeC", "0012");
我需要建立從值此映射到按鍵的逆所以我做:
inverseMap = new HashMap<String, ArrayList<String>>();
for(Map.Entry<String, String> e:map.entrySet()) {
String code = e.getKey();
String val = e.getValue();
ArrayList<String> codesColliding = inverseMap.get(val);
if(codesColliding == null) {
codesColliding = new ArrayList<>(4);
inverseMap.put(val, codesColliding);
}
codesColliding.add(code);
}
這工作,但我認爲這是不理想的,因爲我使用比需要更多的內存絕大多數的鑰匙。
雖然從編碼角度來看,它的工作原理我想知道這是否可以被不同走近
注(通過其他數據結構):我感興趣的是普通的Java 7(沒有額外的庫)接近
爲什麼當它在每次迭代之間被重新分配時,會添加到'codesColliding'對象? – Tgsmith61591
@ Tgsmith61591因爲對'codesColliding'的引用在地圖中。 –
對不起,誤讀反映圖爲'HashMap',而不是ArrayList。 D'哦! –
Tgsmith61591