本文介紹了遞歸或迭代地從HashMap檢索鍵值組合的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我要從HashMap
檢索k
,v
-對。
入口如下:
a = 3,4
b = 5,6
等等。我需要這些值的組合。
a=3, b=5
a=3, b=6
a=4, b=5
a=4, b=6
我不知道這些值有多少個鍵和多少個條目。使用entrySet
可以獲得值,但不能獲得組合。它看起來像遞歸,但又是如何遞歸的呢?
以下是我的代碼:
HashMap<String, String[]> map = new HashMap<String, String[]>();
BufferedReader file = new BufferedReader(new FileReader("test.txt"));
String str;
while ((str = file.readLine()) != null) {
// ... logic
map.put(key, value);
}
System.out.println("number of keys: " + map.size());
for (Map.Entry<String, String[]> entry : map.entrySet()) {
for (String value : entry.getValue()) {
System.out.println(entry.getKey() + ": " + value);
}
}
file.close();
推薦答案
您可以嘗試以下代碼:
public void mapPermute(Map<String, String[]> map, String currentPermutation) {
String key = map.keySet().iterator().next(); // get the topmost key
// base case
if (map.size() == 1) {
for (String value : map.get(key)) {
System.out.println(currentPermutation + key + "=" + value);
}
} else {
// recursive case
Map<String, String[]> subMap = new HashMap<String, String[]>(map);
for (String value : subMap.remove(key)) {
mapPermute(subMap, currentPermutation + key + "=" + value + ", ");
}
}
}
不保證內存效率或速度。如果希望保持鍵在映射中的順序,則必須傳入TreeMap
,并在遞歸情況下更改代碼以使用TreeMap
。
如基本情況所示,我假設您的映射中至少有一個條目。
這篇關于遞歸或迭代地從HashMap檢索鍵值組合的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,