任务描述
本关任务:了解Map接口,完成HashMap的增删改查
1.增加key为name,value为lihong的元素
2.删除key为firstkey的元素
3.修改key为secondkey的元素值为educode
4.打印输出HashMap
相关知识
1.Map接口概述
Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,在使用Map集合时可以通过指定的Key找到对应的Value,例如根据一个学生的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap。
将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值。其实Map集合中存储的就是键值对。map集合中必须保证键的唯一性。
Map接口和Collection接口的不同
- Map是双列的,Collection是单列的
- Map的键唯一,Collection的子体系Set是唯一的
- Map集合的数据结构值针对键有效,跟值无关
- Collection集合的数据结构是针对元素有效
Map常用的子类:
- Hashtable:内部结构是哈希表,是同步的。不允许null作为键,null作为值。
- Properties:用来存储键值对型的配置文件的信息,可以和IO技术相结合。
- HashMap:内部结构式哈希表,不是同步的。允许null作为键,null作为值。
- TreeMap:内部结构式二叉树,不是同步的。可以对Map结合中的键进行排序。
- HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持。
2.Map接口常用方法
方法声明 | 功能描述 |
---|---|
put(K key, V value) | 有添加和替换功能 |
putAll(Map m) | 添加一个Map的元素 |
clear() | 清空集合 |
remove(Object key) | 根据键删除一个元素 |
containsKey() | 判断集合是否包含指定的键 |
containsValue() | 判断集合是否包含指定的值 |
isEmpty() | 判断集合是否为空 |
get(Object key) | 根据键获取值 |
keySet() | 获取所有的键 |
values() | 获取所有的值 |
entrySet() | 获取所有的Entry |
size() | 获取集合元素的个数 |
3.常见的几种Map接口的实现类
HashMap
键是哈希表结构,可以保证键的唯一性
LinkedHashMap
Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
TreeMap
键是红黑树结构,可以保证键的排序和唯一性,自然排序,比较器排序。
4.HashMap(重点)
HashMap是基于哈希表的Map接口的非同步实现(Hashtable跟HashMap很像,唯一的区别是Hashtalbe中的方法是线程安全的,也就是同步的)。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
4.1添加元素
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites);
}
}
4.2 访问元素
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
System.out.println(Sites.get(3));
}
}
4.3 删除元素
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
Sites.remove(4);
System.out.println(Sites);
}
}
4.4 迭代元素
// 引入 HashMap 类
import java.util.HashMap;
public class RunoobTest {
public static void main(String[] args) {
// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for(String value: Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
}
}
4.5 修改元素
put的方法即是添加也是修改。它没有update方法,所以当要修改一个元素的时候首先一定要先判断这个元素是否存在于hashmap中然后再修改。不然一旦没有该元素,那么put就实现了添加的作用。
编程要求
根据提示,在右侧编辑器补充代码,完成以下任务:
1.增加key为name,value为lihong的元素
2.删除key为firstkey的元素
3.修改key为secondkey的元素值为educode
4.打印输出HashMap
测试说明
平台会对你编写的代码进行测试:
无输入
开始你的任务吧,祝你成功!
package step4;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
public class HelloHashMap {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
HashMap hashMapExample = new HashMap<>();
for (int i = 0; i < 2; i++) {
hashMapExample.put(scanner.next(), scanner.next());
}
// ---------------------Begin------------------------
hashMapExample.put("secondkey", "educode");
hashMapExample.remove("firstkey");
hashMapExample.put("name", "lihong");
System.out.println(hashMapExample);
// ---------------------End------------------------
}
}