我想显示HashMap
中的值。 A HashMap
可能有重复值(但不是重复键),但我只想显示一次值。在Java Map中查找重复值?
所以我应该找到Map
是否有重复的值。我知道我们可以迭代Map
并使用map.containsValue(value)
的返回布尔值。我想知道是否存在任何方法在地图中查找重复值,或者我应该自己编写代码?
我想显示HashMap
中的值。 A HashMap
可能有重复值(但不是重复键),但我只想显示一次值。在Java Map中查找重复值?
所以我应该找到Map
是否有重复的值。我知道我们可以迭代Map
并使用map.containsValue(value)
的返回布尔值。我想知道是否存在任何方法在地图中查找重复值,或者我应该自己编写代码?
一个简单的解决方案是将您的值列表的大小与您的值集进行比较。
// pseudo-code
List<T> valuesList = map.values();
Set<T> valuesSet = new HashSet<T>(map.values);
// check size of both collections; if unequal, you have duplicates
没有提供像jdk1.6这样的方法。你可以做
一个简单的方法是
例子:
Map<Object, Object> map = new HashMap<Object, Object>();
map.put(1,2);
map.put(3,4);
map.put(2,2);
map.put(5,3);
Set<Object> uniqueValues = new HashSet<Object>(map.values());
System.out.println(uniqueValues);
输出:
个[2, 3, 4]
使用Apache公共库类的方法
org.apache.commons.collections.MapUtils.invertMap(map)
和比较实际的地图和地图反转的大小。
尝试这个代码
private boolean hasDuplicates(Map<Integer, List<String>> datamap){
boolean status = false;
Set valueset=new HashSet(datamap.values());
if(datamap.values().size()!=valueset.size()){
status=true;
}
else{
status = false;
}
return status;
}
try this code but this is not optimize code :
public class HashMapDulicate {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
map.put("A", 1);
map.put("B", 1);
map.put("C", 3);
map.put("D", 4);
Set set=new HashSet<>();
List list=new ArrayList<>();
for(Entry<String, Integer> mapVal:map.entrySet()) {
if(!set.add(mapVal.getValue())) {
list.add(mapVal.getValue());
}else {
set.add(mapVal.getValue());
}
}
for(Entry<String, Integer> mapVal:map.entrySet()) {
if(list.contains(mapVal.getValue())){
System.out.println(mapVal.getKey() +":" + mapVal.getValue());
}
}
}
}
这是有效的代码本身,而不是伪代码:) – Nivas
这高科技的罚款。但如果我想删除重复的意思应该做手动删除操作的权利? – Silambarasan
是的,你必须做一个手动操作。但是,如果你能向我解释* exact *的情况,就像你最终得到多个具有相同值的键以及为什么要删除它们一样,也许我可以提出一个更好的解决方案。 –