HashMap根据value获取key值

Map集合的特性:一个key值对应一个value值,key值保持着唯一性,而插入的键值对相同key值会发生覆盖原key值对应的value值。

Map集合中一个key对应一个value,但是一个相同的value值可以对应多个key值


下面我们来根据value获取key,根据key获取value(1.foreach循环遍历 2.迭代器遍历)
举一个例子会更生动!


题目


创建一个Map集合,在集合中放入年份、世界杯冠军获得的国家。存储的键值对例如:“1994”,“巴西”;“1962”,“巴西”;(key存储年份,value存储国家球队)

1、从命令行中读入一个字符串,表示年份,输出该年的世界杯冠军是哪个国家球队。如果该年没有举办世界杯,则输出:没有举办世界杯【根据key获取对应value】

2、读入一个国家名字,输出该球队夺冠的年份列表,如果该国家没有获得过世界杯冠军或没有参加过世界杯,则输出:没有获得过世界杯【根据相同value获取多个key】


注意:这里我强调一下,虽然在写Set对象接收map.entrySet()方法中的键值对的时候可以省略泛型,但是我不建议省略,个人感觉要遵循编码规范,养成良好的编码习惯!(虽然有时候感觉没有用,但我相信你会从中受益的!)

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
import java.util.Set;

/**
 * @author Ziph
 * @date 2020年3月6日
 * @Email [email protected]
 */
public class TestGetkeys {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//将年份和国家存储在Map集合中(这里我就简单的放了几组键值对,用的String类型)
		Map<String, String> map = new HashMap<String, String>();
		
		map.put("1930", "乌拉圭");
		map.put("1938", "意大利");
		map.put("1934", "意大利");
		map.put("1950", "乌拉圭");
		map.put("1974", "德国");
		map.put("1970", "巴西");
		map.put("1978", "阿根廷");
		
		//解决第一问:根据key值获取对应value值
		System.out.print("请输入您要查询世界杯冠军的年份:");
		String date = sc.nextLine();
		if (map.get(date) != null) {
			System.out.println(map.get(date));
		} else {
			System.out.println("没有举办世界杯");
		}
		
		//解决第二问:根据相同value获取多个key
		System.out.print("请输入一个您要查找得世界杯冠军的国家:");
		String country = sc.nextLine();
		//entrySet()方法把map中的每个键值对变成对应成Set集合中的一个对象
		Set<Entry<String, String>> set = map.entrySet();
		//因为循环获取多个满足相同value值得key值
		//如果没有获得过世界杯的国家则会打印循环次数的行数,而return结束函数也会随之出现问题
		//我这里用的flag标记,来实现功能
		boolean flag = false;
		for (Entry<String, String> e : set) {
			if (e.getValue().equals(country)) {
				System.out.print(e.getKey() + "年 ");
				flag = true;
			}
		}
		if (flag == false) {
			System.out.println("没有获得过世界杯");
			return;
		}	 
	}
}

迭代器遍历

		Set<Entry<String, String>> set = map.entrySet();
		Iterator<Entry<String, String>> it = set.iterator();
		while (it.hasNext()) {
			Map.Entry<String, String> e = (Map.Entry<String, String>) it.next();
			if (e.getValue().equals(country)) {
				System.out.print(e.getKey() + "年 ");
			}
		}

在这里插入图片描述

在这里插入图片描述

发布了103 篇原创文章 · 获赞 162 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_44170221/article/details/104709329