Java基础课 | 开房门(哈希表:map形式)
Java基础
map
(映射)
概念和特点
map:将一个元素(key
键)与一个相对应的值(value
)关联起来。键和值一一对应,在map
中键是唯一的,也有一个唯一的与之对应的值。
HashMap
的常用方法
Java中,Map
是一种接口,主要用于存储和管理键值对数据,使用它可以方便的进行查找操作。常见的实现类包括HashMap
(最常用的实现类)、TreeMap
、LinkedHashMap
等。
import java.util.Map; //引入Map接口
import java.util.HashMap; //引入HashMap实现类
//创建一个HashMap实例,用于表示学生分数
Map<String, Integer> studentScores = new HashMap<>();
基本操作:创建、添加、删除、查找等
map
结构的常见方法:
put(key, value)
:将指定的键和值添加到map中,如果键已存在,则替换对应的值。get(key)
:根据key获取对应的值value。remove(key)
:根据key移除对应的键值对。containsKey(key)
:检查map中是否包含key键。containsValue(value)
:检查map中是否包含value值。keySet()
:返回包含所有键的集合。values()
:返回包含所有值的集合。entrySet()
:返回包含所有键值对的集合。
// 创建一个HashMap实例
Map<String, Integer> studentScores = new HashMap<>();
// 添加键值对到映射
studentScores.put("zs", 100);
studentScores.put("ls", 97);
studentScores.put("Mike", 99);
// 获取键对应的值
int score = studentScores.get("Mike");
// 移除zs对应的键值对
studentScores.remove("zs");
遍历HashMap
的键值对
如果想要遍历Map
映射中的所有键值对,可以使用for-each
循环。
for (Map.Entry<Integer, Integer> entry : hashMap.entrySet()) {
int key = entry.getKey();
int door = entry.getValue();
System.out.println(key + "对应的房间是" + door);
}
Map.Entry
一般用于表示键值对,包括键值对,定义了getKey()
和getValue()
两个方法。hashMap.entrySet()
返回一个包含Map
中所有键值对的集合,每个元素都是一个Map.Entry
对象。
题目
题目描述
假设你手里有一串钥匙,这串钥匙上每把钥匙都有一个编号,对应着一个房门的编号。现给你一个房门编号,你需要判断是否能够打开该房门。
输入描述
测试数据共有多组。
第一行为一个整数 s,表示共有多少组测试数据。
每组第一行有一个整数 n,表示钥匙串上有多少把钥匙。
后面共有 n 行输入,每行两个整数,第一个整数 k 表示钥匙编号,第二个整数 d 表示房门编号。
最后一行有一个整数 x,表示需要打开的房门编号。
输出描述
输出多组,每组占一行。 如果能打开,则输出钥匙编号,不能打开则输出“Can’t open the door.”。
程序编写
import java.util.Map;
import java.util.HashMap; //导入Map和HashMap
import java.util.Scanner;
public class Main {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
int s = scanner.nextInt(); //获取整数s,表示s组测试数据
for (int i = 0; i < s; i++) {
int n = scanner.nextInt(); //钥匙的数量
Map<Integer, Integer> hashMap = new HashMap<>(); //创建一个Map
for (int j = 0; j < n; j++) {
int key = scanner.nextInt(); //钥匙编号
int door = scanner.nextInt(); //房门编号
hashMap.put(door,key); //将key和door添加到Map中
}
int x = scanner.nextInt(); //要打开的房门编号
if (hashMap.keySet().contains(x)) {
System.out.println(hashMap.get(x));
} else {
System.out.println("Can't open the door.");
}
}
scanner.close();
}
}