对于这个题目,刚开始我是考虑保留一个重复值的键值对,在不指定的情况下,可以将键值对对调放进一个hashmap集合中,瞬间,就只剩下一个了,但是这里的代码是删除掉map集合中所有带有重复值的键值对。
就一个案例来解决这个问题,前面是我的代码和方法,后面一个是别人的,两个方法的思路基本上都是一样的,包括案例都是别人的
第一种方式:
public static void main(String[] args) {
Map<String, Integer> hm=new HashMap<>();
hm.put("张", 3);
hm.put("李", 4);
hm.put("王", 5);
hm.put("赵", 6);
hm.put("孙", 7);
hm.put("田", 7);
hm.put("周", 5);
//创建一个集合存放值,遍历map集合获取所有的值
ArrayList<Integer> list=new ArrayList<>();
Set<String> keys=hm.keySet();
for (String key : keys) {
list.add(hm.get(key));
}
System.out.println(list);
//遍历list集合,向后遍历找到相同的元素,添加到新的listrepeat集合中
ArrayList<Integer> listrepeat=new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
for (int j = i+1; j < list.size(); j++) {
if (list.get(i)==list.get(j)) {
listrepeat.add(list.get(i));
}
}
}
//System.out.println(listrepeat);
//遍历hm集合,如果值包含在listrepeat中,则返回键的值,存入集合restkey中
ArrayList<String> restkey=new ArrayList<>();
for (String key : keys) {
if (listrepeat.contains(hm.get(key))) {
restkey.add(key);
}
}
System.out.println(restkey);
//删除掉在集合restkey中出现的键的元素
for (String string : restkey) {
hm.remove(string);
}
System.out.println(hm);
Set<String> result=hm.keySet();
System.out.println(result);
}
第二种方法
// 1.创建HashMap集合key存放姓名,value存放年龄
HashMap<String, Integer> hm = new HashMap<>();
// 2.使用put方法添加对应的元素
hm.put("张", 3);
hm.put("李", 4);
hm.put("王", 5);
hm.put("赵", 6);
hm.put("孙", 7);
hm.put("田", 7);
hm.put("周", 5);
// 3.定义一个ArrayList存放重复的值
ArrayList<Integer> repeatValues = new ArrayList<>();
// 4.拿到所有的键放到ArrayList中
ArrayList<Integer> values = new ArrayList<>(hm.values());
// 5.遍历所有的值
for (int i = 0; i < values.size(); i++) {
// 6.拿到一个值
Integer value = values.get(i);
// 7.和后面的那些值比较,看是否有重复的
for (int j = i + 1; j < values.size(); j++) {
Integer v2 = values.get(j);
// 8.和后面的比较相同,说明重复
if (value == v2) {
// 9.将重复的值放入repeatValues中
repeatValues.add(value);
}
}
}
System.out.println(repeatValues);
// 10.定义一个ArrayList存放值相同的键.因为只能拿键去删除
ArrayList<String> repeatKeys = new ArrayList<>();
// 11.使用keySet遍历HashSet
Set<String> keySet = hm.keySet();
for (String key : keySet) {
Integer value = hm.get(key);
// 12.如果值是重复的,那么将这个件放入repeatKeys中
if (repeatValues.contains(value)) {
repeatKeys.add(key);
}
}
System.out.println(repeatKeys);
// 13.遍历重复的键,通过键去HashMap中删除元素
for (String key : repeatKeys) {
hm.remove(key);
}
// 14.输出删除后的HashMap
System.out.println(hm);
}