【发布时间】:2019-03-22 23:39:39
【问题描述】:
我有一个哈希图,其中一些键指向相同的值。我想找到所有相等的值并打印相应的键。
这是我目前拥有的代码:
Map<String, String> map = new HashMap<>();
map.put("hello", "0123");
map.put("hola", "0123");
map.put("kosta", "0123");
map.put("da", "03");
map.put("notda", "013");
map.put("twins2", "01");
map.put("twins22", "01");
List<String> myList = new ArrayList<>();
for (Map.Entry<String, String> entry : map.entrySet()) {
for (Map.Entry<String, String> entry2 : map.entrySet()){
if (entry.getValue().equals(entry2.getValue()))
{
myList.add(entry.getKey());
}
}
}
当前代码将重复项两次添加到列表中,但它也将每个键添加一次。
谢谢。
【问题讨论】:
-
遍历每个条目。将该值添加到一个新的 Set 中,如果该值已包含在其中,请检查该值。这保证了 O(n) 的运行时间。
-
如果您关心性能,最好有另一个 HashMap 将您的值存储为映射到数组的键或原始 HashMap 中的键列表。
标签: java hashmap duplicates