题目详情:
7-3 HashMap应用 (10 分)
Map接口提供了将key映射到值得对象,用于存储键-值对,key不重复。主要解决通过key查找 value的应用,比如 通过学号查找学生信息。可以将学号key与 学生信息Student进行存储。 ######Map接口常用的实现类HashMap和TreeMap,HashMap对象 中key的存储一般是无序的,通过哈希函数进行查找对应value值。对于经常需要进行查找的数据可以采用散列映射来存储这样的数据,即为数据指定一个查找它的关键字,然后按着“健-值”对,将关键字和数据一并存入散列映射中。 TreeMap类 在存储的时候会对key进行排序,但key对象要能比较大小,否则 key类需要实现Comparable接口
HashMap 方法 put()添加键和值,values()取值集合,keyset()键集合,ContainsKey()键是否存在
ContainsValues()判断值是否存在
HashMap常用方法及使用案例 参看 如下PDF文件
仿照PDF文件例子,设计一个英语单词查询的程序,用户输入一个英文单词回车确认,显示英文单词的汉语翻译,编写完整代码。
过程如下:
(1)定义一个class WordDict单词字典类,有Map<String,String> hashmap;
属性用于存储英文单词和中文单词 键值对;
无参构造函数WordDict() 创建hashmap对象实体;
void add(String englishword,String chineseword)实现向hashmap对象增加一个键值对;
String find(String englishword)从hashmap对象中查找englishword对应的中文单词,找到返回对应中文单词字符串,没找到返回null;
void print() 输出字典所有键值对(输出形式 英文单词 中文单词)
(2)主类Main中的main方法:
1)首先创建一个WordDict单词字典对象;
2)从键盘输入多个英文单词与中文单词键值对,每输入一个英文单词和中文单词 就添加到字典对象中,输入字符串-1作为键值对输入结束
3)接下来 输入查找的英文单词 存放到 searcheng字符串中
4)然后 输出 字典键值对
5)查找英文单词searcheng 对应中文单词,然后输出找到的中文单词,如果没找到 "输出没查到对应中文单词”
部分代码提示:
class WordDict{
Map<String,String> hashmap;
WordDict(){
// 补充代码 实现 hashmap对象创建
}
void add(String englishword,String chineseword) {
//将键值对 添加到 hashmap
}
String find(String englishword) {
// 在hashmap中查找englishword对应中文,找到,返回对应中文否则 返回null
}
void print() {
//通过 keySet(),get()方法实现输入所有键值对 输出格式:英文单词 中文单词(中间1个空格)不清楚可参考PDF文件
}
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
WordDict wd=new WordDict();
Scanner sc=new Scanner(System.in);
//在下面编写代码实现:通过键盘输入给字典添加键值对 即 英文单词 和中文单词,以-1字符串作为结束
String searcheng=sc.next();//输入查询的英文单词
System.out.println("输出所有字典元素:");
//在下面编写代码 实现 WordDict字典对象 键值对的输出 按 英文单词 中文单词 输出
System.out.println("输出对应中文单词:");
//在下面编写代码实现:输出 searcheng对应的 中文单词,如果没找到 输出"没查到对应中文单词"
}
}
输入格式:
grandness 伟大
swim 游泳
-1
swim
-1前面 是 字典中的英文和中文键值对,空格分隔 ,swim是 要查询的英文单词
输出格式:
输出所有字典元素:
grandness 伟大
swim 游泳
输出对应中文单词:
游泳 (如果没找到对应中文,显示"没查到对应中文单词"
输入样例:
在这里给出一组输入。例如:
grandness 伟大
swim 游泳
-1
swim
结尾无空行
输出样例:
在这里给出相应的输出。例如:
输出所有字典元素:
grandness 伟大
swim 游泳
输出对应中文单词:
游泳
结尾无空行
答案代码:
import java.util.Scanner;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Main {
public static void main(String[] args) {
WordDict wd=new WordDict();
Scanner sc=new Scanner(System.in);
//在下面编写代码实现:通过键盘输入给字典添加键值对 即 英文单词 和中文单词,以-1字符串作为结束
while(true){
String key = sc.next();
if(key.equals("-1")){
break;
}
String value = sc.next();
if(value.equals("-1")){
break;
}
wd.add(key,value);
}
String searcheng=sc.next();//输入查询的英文单词
System.out.println("输出所有字典元素:");
//在下面编写代码 实现 WordDict字典对象 键值对的输出 按 英文单词 中文单词 输出
wd.print();
System.out.println("输出对应中文单词:");
//在下面编写代码实现:输出 searcheng对应的 中文单词,如果没找到 输出"没查到对应中文单词"
String s = wd.find(searcheng);
if(s==null){
System.out.println("没查到对应中文单词");
}else{
System.out.println(s);
}
}
}
class WordDict {
Map<String,String> map ;
public WordDict(){
map = new HashMap<>();
}
public void add(String englishWord,String chineseWord){
map.put(englishWord,chineseWord);
}
public String find(String englishWord){
if(!map.containsKey(englishWord)){
return null;
}
return map.get(englishWord);
}
public void print(){
Set<String> strings = map.keySet();
for(String value:strings){
System.out.println(value+" "+map.get(value));
}
}
}