Java 中的 HashMap
创建一个名为 scores 的 HashMap<String, String>,调用 scores.put("oak", "leaf");,然后打印 scores.get("oak")。编译 Desk.java 并运行 java Desk。屏幕应显示一行:leaf。键 "oak" 找到值 "leaf"。放入一对并用同一键读回,就是本页要教的内容。
用键找到值
在 list-methods 页,你用槽位号取到值:get(0)。HashMap 用你选定的键取到值。你用 put 写入这对。你用 get 和同一键读取值。本课教学路径没有零号槽位——键就是标签。
打开 Desk.java。保留公共类名 Desk,使其与文件名一致。删掉残留的 ArrayList 行、tags.get(0)、tags.size()、tags.remove(0),以及任何 Rack 或 Shelf 演示。那些属于列表页。也删掉任何 Scanner、nextLine 或键盘读取。程序不得等待你输入。
靠近顶部、在 public class Desk 上方写:
import java.util.HashMap;
这条导入让 HashMap 类型能用短名。没有它,本页上 javac 看不到短名 HashMap。仔细拼写 java.util 与 HashMap。这里不要把 import java.util.*; 当成要求——一条准确导入就够。
在 main 里创建映射:
HashMap<String, String> scores = new HashMap<String, String>();
尖括号里第一种类型是键的种类。第二种是值的种类。本页两者都是 String,好让演示留在词语上。名称 scores 是你在教学文件里保留的名字。调用 new HashMap<String, String>() 建出空映射。此刻它不持有任何对。
把 oak 放到 leaf,再取 oak
单独一行调用 scores.put("oak", "leaf");。第一个引号里的词是键。第二个是值。put 里的顺序重要:键在前,值在后。在你保留的文件里不要对调。
然后写:
System.out.println(scores.get("oak"));
把同一键 "oak" 传给 get。保留文件里不要把 "leaf" 当作 get 参数——get 要的是键,不是值。不要写 scores.get(0)——那是 Rack 的列表形态,不是这里的映射形态。编译前先保存。
import java.util.HashMap;
public class Desk {
public static void main(String[] args) {
HashMap<String, String> scores = new HashMap<String, String>();
scores.put("oak", "leaf");
System.out.println(scores.get("oak"));
}
}
从放有 Desk.java 的文件夹运行 javac Desk.java。当圆括号、花括号、尖括号和分号都匹配时,javac 自己不写任何行。然后运行 java Desk——不要 java Desk.java,也不要 java HashMap。运行命令里去掉 .java 结尾。启动含有 main 的那个类。
程序应打印一行后停止:leaf。它不应要求你输入。若终端在等键盘输入,某个文件里还留着旧练习的 nextLine 调用。删掉该调用,保留 HashMap 创建、put 行以及 System.out.println(scores.get("oak"));。
把这次运行走一遍。Java 从 Desk.main 开始。导入已经点明你指的是哪个 HashMap。new 行建出空映射。put 存下 oak → leaf 这对。调用 get("oak") 返回 leaf。打印行写出那个词。屏幕显示 leaf。不应再打印别的。若看到 oak,你是手写打印了键或用了错误的 get 参数。若看到 2 或 [pine],仍在跑 Rack 的 size 或 remove 演示——改用 java Desk。
若 javac 说找不到 HashMap,导入行缺失、拼错,或写在 public class Desk 之后。把 import java.util.HashMap; 移到类行上方。若在任何 put 之前调用 get("oak"),打印可能显示 null,因为该键从未存过。本页保持 put 在 get 之前。若无引号写 scores.put(oak, leaf);,javac 会把这些词当成不存在的名字。键和值两边都保留引号。
打印整个映射作第二次查看
第二个 Desk 文件在同一 put 之后打印映射对象本身。那会显示你打印映射时 Java 使用的成对形态。
import java.util.HashMap;
public class Desk {
public static void main(String[] args) {
HashMap<String, String> scores = new HashMap<String, String>();
scores.put("oak", "leaf");
System.out.println(scores);
}
}
用同样方式编译并运行第二个文件。屏幕显示 {oak=leaf}——键、等号、值,包在花括号里。该形态便于确认这对已在映射内。测验屏幕 leaf 的教学路径仍是带 get("oak") 的第一个文件。整图打印只用来查看已存的那一对。不要把 get(0) 混进任一 Desk 文件——本页映射不使用列表槽位号。
若屏幕显示 [] 或 [oak, pine],仍在跑 ArrayList 演示。留在 HashMap 和 java Desk。
与列表 get 以及 put 的对比
在 list-methods 页,get(0) 在 add 之后需要槽位下标。本页上,get("oak") 在 put 之后需要键字符串。只打印 tags.get(0) 的残留 Rack 文件是另一课。本页在 Desk 里保留 put("oak", "leaf") 与 get("oak")。
你可以用更多 put 调用存更多对。本页只保留一对,好让键和打印出的值容易看见。后面一页——HashSet——存放唯一值,没有单独的键值成对故事。这里继续用 HashMap 的 put 与 get。
若附近还有旧的 Rack.java 或 Shelf.java,可以不动,只有在它们让你搞不清运行哪个类时再删。编译本课 HashMap 文件后运行 java Desk。
留给 HashSet 的内容
本页用 HashMap 打开键值存储。下一页用 HashSet 打开唯一值的集合。这里继续在映射上用 put 与 get。不要把集合的 add 当成这页的要求;本课目标是找到值的键以及屏幕上的 leaf。
进入 HashSet 之前
你可以导入 java.util.HashMap,创建 HashMap<String, String> scores,调用 scores.put("oak", "leaf");,再打印 scores.get("oak")。编译 Desk.java 并运行 java Desk。屏幕显示 leaf。键找到了值。下一页是 HashSet,在那条课的路径上你存放唯一值,而不是把每个值单独配一个键。
把导入放在类上方。把 put 放在 get 之前。两次调用里键 "oak" 保持相同。这三条习惯是本页继续前进前的检查点。当 get("oak") 之后屏幕显示 leaf,HashMap 完成本课任务,你已准备好下一主题。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部