import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class MyClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(1, "Anil");
hm.put(2, "Deven");
hm.put(3, "sanjay");
hm.put(4, "sanjay");
hm.put(5, "Raj");
hm.put(6, "sanjay");
Set<Integer> keys = hm.keySet();
}
}
这个我的代码我想从hash-map中删除所有重复的值,并希望在控制台上打印,请告诉我我将如何做到这一点。
答案 0 :(得分:2)
您的HashMap是hm
。将hm
的值放在另一个HashMap hm2
中,其中hm
的值是hm2
的键,hm2
的值可以是任意值(例如对象Boolean.TRUE)。
然后遍历第二个HashMap hm2
并打印出它的密钥。
您可以使用HashMap
代替HashSet
代替hm2
(这更好,因为您不需要Boolean.TRUE部分)。
import java.util.HashMap;
import java.util.HashSet;
public class MyClass {
public static void main(String[] args) {
HashMap<Integer, String> hm = new HashMap<Integer, String>();
hm.put(1, "Anil");
hm.put(2, "Deven");
hm.put(3, "sanjay");
hm.put(4, "sanjay");
hm.put(5, "Raj");
hm.put(6, "sanjay");
HashSet<String> hm2 = new HashSet<String>();
hm2.addAll(hm.values());
for (String str : hm2){
System.out.println(str);
}
}
}
答案 1 :(得分:2)
如果要删除重复值,则无法将映射与键保持一致,因为与重复值关联的唯一键也将从映射中删除。
如果您只需要地图中的唯一值列表,请尝试以下方法:
试试这个:
Set<String> set = new HashSet<String>(hm.values());
System.out.println(set);
输出:[Anil,Deven,Raj,sanjay]
答案 2 :(得分:2)
反转地图两次
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class UniqueMapValues
{
public static void main(String[] args)
{
Map<Integer, String> hm = new HashMap<Integer, String>();
hm.put(1, "Anil");
hm.put(2, "Deven");
hm.put(3, "sanjay");
hm.put(4, "sanjay");
hm.put(5, "Raj");
hm.put(6, "sanjay");
hm = invert(invert(hm));
System.out.println(hm);
}
private static <K, V> Map<V, K> invert(Map<K, V> map)
{
Map<V, K> result = new HashMap<V, K>();
for (Entry<K, V> entry : map.entrySet())
{
result.put(entry.getValue(), entry.getKey());
}
return result;
}
}