我想使方法removeValue("a", "x")
。
它必須刪除字母之間的所有鍵和值。例如, {1 = a,2 = b,3 = c,5 = x} - >> {1 = a,5 = x}。我嘗試過使用equals和iterator,但我不知道如何編寫它。Java HashMap迭代器
public class CleanMapVal {
public static void main(String[] args) throws Exception {
Map<String, String> map = new HashMap<String, String>();
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "w");
map.put("5", "x");
System.out.println(map);
for (Iterator<String> it = map.keySet().iterator(); it.hasNext();)
if ("2".equals(it.next()))
it.remove();
System.out.println(map);
}
public static <K, V> void removeValue(Map<K, V> map) throws Exception {
Map<K, V> tmp = new HashMap<K, V>();
for (Iterator<K> it = map.keySet().iterator(); it.hasNext();) {
K key = it.next();
V val = map.get(key);
if (!tmp.containsValue(val)) {
tmp.put(key, val);
}
}
map.clear();
for (Iterator<K> it = tmp.keySet().iterator(); it.hasNext();) {
K key = it.next();
map.put((K) tmp.get(key), (V) key);
}
}
}
您有一個問題,因爲'Map'不能保證其條目的排序;所以沒有像「a和x之間的鍵」這樣的東西開始。當然,你也可以使用'LinkedHashMap',但是我的懷疑是這是一個XY開始的問題。 – fge
我不確定你在做什麼。正如@fge提到的HashMap沒有保證的順序。另外LinkedHashMap命令它的元素像List,新的元素放在最後,所以你仍然沒有通過它們的值(或者鍵)保證元素的順序。因此,讓我們說你有地圖'{a = 1,b = 2,c = 3,d = 2,e = 1}',並調用'removeValue(「1」,「3」)''。應該是'{a = 1,c = 3,d = 2,e = 1}還是'{a = 1,c = 3,e = 1}'或者別的什麼? – Pshemo