map集合之——删除map集合中值相同的键值对

本文探讨如何从Map集合中删除具有相同值的键值对。通过两种不同的方法,实现了在不指定情况下删除所有重复值的键值对,保持Map中元素的唯一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于这个题目,刚开始我是考虑保留一个重复值的键值对,在不指定的情况下,可以将键值对对调放进一个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);
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值