第1关:学习-Java集合类之Map的HashMap之常用方法的使用
相关知识
什么是 HashMap
HashMap 是 Map 接口的实现类,它存储的内容是键值对(key-value)映射,其中 key、value 都可以为 null。HashMap 是无序的,即被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无序的。
创建 HashMap 集合
使用以下代码即可创建一个 HashMap 集合。
- public static void main(String[] args) {
- // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型
- Map<String, Integer> hashMap = new HashMap<>();
- }
HashMap 集合常用方法
下表展示了 HashMap 集合的常用方法:
方法名 | 方法说明 |
put()方法 | 往集合中添加元素,key 值不可重复,重复时会覆盖之前的 value 值 |
size()方法 | 返回集合长度 |
get(key)方法 | 获取对应 key 值的 value 值 |
clear()方法 | 清除集合中的所有元素 |
values()方法 | 返回一个新集合,获取集合中所有元素的 values |
keySet()方法 | 返回一个新集合,获取集合中所有元素的 key |
remove()方法 | 根据 key 或者 key-value 去除集合中元素,并分别返回 value 值和 Boolean 值 |
iterator()方法 | 返回一个迭代器对象 |
entrySet()方法 | 将 Map 集合每个 key-value 转换为一个 Entry 对象,并返回由所有的 Entry 对象组成的 Set 集合 |
containsKey() | 判断集合中是否含右指定的 key 值 |
常用方法示例:
- public static void main(String[] args) {
- // 创建 HashMap 集合,key存储字符串类型,value存储整数类型
- Map<String, Integer> hashMap = new HashMap<>();
- // 添加元素
- hashMap.put("李四",28);
- hashMap.put("张三",26);
- hashMap.put("王五",26);
- // 根据 key 获取 value 值
- Integer zs = hashMap.get("张三");
- System.out.println(zs);
- // 获取所有 key 值
- Set<String> strings = hashMap.keySet();
- System.out.println(strings);
- // 获取所有 value 值
- Collection<Integer> values = hashMap.values();
- System.out.println(values);
- // 根据 key 去除元素
- Integer ww = hashMap.remove("王五");
- System.out.println(ww);
- // 根据 key-value 去除元素
- boolean boole = hashMap.remove("李四", 28);
- System.out.println(boole);
- System.out.print(hashMap);
- }
执行结果:
- 26
- [李四, 张三, 王五]
- [28, 26, 26]
- 26
- true
- {张三=26}
遍历 HashMap 集合
以下是三种常用遍历方法。
- public static void main(String[] args) {
- // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型
- Map<String, Integer> map = new HashMap<>();
- // 添加元素
- map.put("李四",28);
- map.put("张三",26);
- map.put("王五",26);
- //第一种:通过 keySet 遍历,普遍使用
- for (String key : map.keySet()) {
- System.out.println("key= "+ key + " and value= " + map.get(key));
- System.out.println(----------);
- }
- //第二种:通过 entrySet 和迭代器遍历
- Iterator<Map.Entry<String, Integer>> it = map.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<String, Integer> entry = it.next();
- System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
- System.out.println(----------);
- }
- //第三种:通过 entrySet 和增强 for 循环遍历,推荐,尤其是容量大时
- for (Map.Entry<String, Integer> entry : map.entrySet()) {
- System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
- System.out.println(----------);
- }
- }
执行结果:
- key= 李四 and value= 28
- key= 张三 and value= 26
- key= 王五 and value= 26
- ----------
- key= 李四 and value= 28
- key= 张三 and value= 26
- key= 王五 and value= 26
- ----------
- key= 李四 and value= 28
- key= 张三 and value= 26
- key= 王五 and value= 26
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,使用 HashMap 集合的常用方法完成所给要求,具体如下:
- 接收给定的一行字符串(如:红烧鱼:50,小炒牛肉:75,…);
- 切割字符串,把切割后的元素添加进 HashMap 集合中;
- 往集合中添加一道菜,菜名:lamb,价格:50;
- 输出所有菜名(不含价格);
- 删除红烧鱼和小炒牛肉这两道菜后输出集合长度;
- 打印集合。
注意:字符串中的逗号和分号都是中文符号。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
- 粉蒸肉:50,红烧鱼:50,小炒牛肉:75,手撕包菜:20,蒜蓉虾:100
预期输出:
- [手撕包菜, 蒜蓉虾, lamb, 小炒牛肉, 粉蒸肉, 红烧鱼]
- 4
- {手撕包菜=20, 蒜蓉虾=100, lamb=50, 粉蒸肉=50}
开始你的任务吧,祝你成功!
/*
仔细阅读给出的代码框架及注释,在 Begin-End 间编写程序代码,使用 HashMap 集合的常用方法完成所给要求,具体如下:
- 接收给定的一行字符串(如:红烧鱼:50,小炒牛肉:75,...);
- 切割字符串,把切割后的元素添加进 HashMap 集合中;
- 往集合中添加一道菜,菜名:lamb,价格:50;
- 输出所有菜名(不含价格);
- 删除红烧鱼和小炒牛肉这两道菜后输出集合长度;
- 打印集合。
注意:字符串中的逗号和分号都是中文符号。
*/
import java.util.*;
public class CollTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收给定字符串
Scanner scan=new Scanner(System.in);
String strings=scan.nextLine();
// 第二步:切割字符串
String []str=strings.split(",");
// 第三步:创建 HashMap 集合,key为菜名,value为价格
Map<String,Integer>hasMap=new HashMap<String,Integer>();
// 第四步:添加数据到集合中
for(int i=0;i<str.length;i++) {
String[] k=str[i].split(":");
Integer v=Integer.valueOf(k[1]).intValue();
hasMap.put(k[0], v);
}
// 第五步:往集合中添加给定的一道菜
hasMap.put("lamb", 50);
// 第六步:输出所有菜名
System.out.println(hasMap.keySet());
// 第七步:删除红烧鱼和小炒牛肉这两道菜后输出集合长度
hasMap.remove("红烧鱼");
hasMap.remove("小炒牛肉");
System.out.println(hasMap.size());
// 第八步:打印集合
System.out.println(hasMap);
/********** End **********/
}
}
第1关:学习-Java集合类之Map接口之学生花名册
任务描述
本关任务:把给定的学生花名册数据添加到 Map 集合中。
相关知识
在 Java 的集合体系中,主要包含 Collection 接口以及 Map 接口,本实训将介绍 Map 接口相关知识。
什么是 Map
Collection 接口下的所有子类只可以存储单值元素,倘若我们想要存储键值对元素(如:<张三,男>)到集合中,就必须使用 Map 接口下的实现类(如 HashMap 集合或者 TreeMap 集合)。Map 提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,我们可以根据 key(如:张三) 快速查找 value(如:男),其中键(key)值不可以重复,值(value)是可以重复的。
创建 Map 集合
由于 Map 是一个接口,不能直接实例化,所以只能创建 Map 的引用指向子类对象集合。
- public static void main(String[] args) {
- // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型
- Map<String, Integer> HashMap = new HashMap<>();
- // 创建 TreeMap 集合,key 存储整数类型,value 存储字符串类型
- Map<Integer, String> TreeMap = new TreeMap<>();
- }
往 Map 集合添加数据
我们使用 put(k,v) 方法就可以往集合中添加数据。
- public static void main(String[] args) {
- // 创建 HashMap 集合,key 存储字符串类型,value 存储整数类型
- Map<String, Integer> hashMap = new HashMap<>();
- hashMap.put("张三",26);
- hashMap.put("李四",28);
- // 打印集合
- System.out.println(hashMap);
- // 创建 TreeMap 集合,key 存储整数类型,value 存储字符串类型
- Map<Integer, String> treeMap = new TreeMap<>();
- treeMap.put(4,"哈密瓜");
- // 打印集合
- System.out.println(treeMap);
- }
执行结果:
- {李四=28, 张三=26}
- {4=哈密瓜}
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,把给定的学生花名册数据添加到 Map 集合中,具体要求如下:
- 接收给定的一行字符串(该字符串是学生花名册,如:王亮:24,赵建:25,…,其中 key 为姓名,value 为年龄);
- 切割花名册字符串,把切割后的元素添加到 Map 集合中;
- 打印集合。
注意:字符串中的逗号和冒号都是中文符号。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
- 王亮:24,赵建:25
预期输出:
- {赵建=25, 王亮=24}
import java.util.*;
public class CollTest {
public static void main(String[] args) {
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:接收给定字符串
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
// 第二步:切割花名册
String[] str=line.split(",");
// 第三步:创建 HashMap 集合,key 为姓名,value 为年龄
Map<String,String> hashmap=new HashMap<>();
// 第四步:添加数据到集合中
for(int i=0;i<str.length;i++){
String[] key=str[i].split(":");
hashmap.put(key[0], key[1]);
}
// 第五步:打印集合
System.out.print(hashmap);
/********** End **********/
}
}
第1关:练习-Java集合类之Set的HashSet之组成字符串的字符
任务描述
本关任务: 使用 HashSet 集合输出给定字符串中的所有字符(重复字符只需输出一个)。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,输出给定字符串中的所有字符,具体要求如下:
- 接收给定的一个字符串(如:hello);
- 使用 HashSet 集合输出字符串中的的所有字符(升序,且重复字符只需输出一个)。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
- hello
预期输出:
- e
- h
- l
- o
注意:输出的最后一个字符后面还有一行空行。
/*
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,输出给定字符串中的所有字符,具体要求如下:
- 接收给定的一个字符串(如:hello);
- 使用 HashSet 集合输出字符串中的的所有字符(重复字符只需输出一个)。
*/
// 请在Begin-End间编写代码
/********** Begin **********/
// 第一步:导入相关类
import java.util.HashSet;
import java.util.Scanner;
// 第二步:创建CollTest类
public class CollTest{
public static void main(String[] args){
// 第三步:接收给定的字符串
Scanner sc =new Scanner(System.in);
// 第四步:创建集合
HashSet<Character> hs = new HashSet<>();
String line = sc.nextLine();
char[] arr = line.toCharArray();
// 第五步:将字符串中的每个字符添加进集合
for (char c : arr) {
hs.add(c);
}
// 第六步:输出组成字符串的字符
for(Character ch : hs) {
System.out.println(ch);
}
}
}
/********** End **********/
第1关:学习-Java集合类之List的ArrayList之增删改查
任务描述
本关任务:创建 ArrayList 集合并使用它的增删改查方法。 接收给定的一行字符串,实现如下需求: 1.通过空格(一个)切割字符串; 2.创建一个 ArrayList 集合; 3.将切割后的字符串元素添加至集合中; 4.删除集合的第一个和最后一个元素; 5.添加两个字符串:hello,educoder 至集合中; 6.修改集合的第三个元素,改为:list; 7.打印集合。
相关知识
List 集合
List 集合用于存储有序的、可以重复的元素,因此我们可以通过索引来访问、遍历元素。它主要有 ArrayList 和 LinkedList 两个实现类,本实训将介绍 ArrayList 集合。
ArrayList 集合
ArrayList 是 List 集合的实现类,它的底层数据结构是数组,因此它具有查询快,增删慢的特点。
创建 ArrayList 集合
- // 导入相关类
- import java.util.ArrayList;
- import java.util.List;
- public class ExcTest {
- public static void main(String[] args) {
- // 创建ArrayList集合
- List list=new ArrayList<String>();
- }
- }
可以看到创建 ArrayList 集合时使用的是父类的引用指向子类对象,这种方式可以大大的提高程序的可扩展性。
ArrayList 集合的增删改查
增删改查示例:
- public static void main(String[] args) {
- // 创建ArrayList集合
- List<String> list=new ArrayList<>();
- // 使用add()方法增加元素
- list.add("list"); // 在最新位置添加指定元素
- list.add(1,"hello"); // 在指定位置添加元素
- list.add(2,"java"); // 在指定位置添加元素
- System.out.println(list);
- // 使用get()方法获取指定索引处元素,索引值从0开始
- String s = list.get(0);
- System.out.println(s);
- // 使用set()方法修改指定索引位置的元素值
- list.set(1,"hi");
- System.out.println(list);
- // 使用remove()方法删除指定元素
- list.remove(0); // 删除指定索引的元素
- list.remove("hi"); // 删除指定元素
- System.out.print(list);
- }
执行结果:
- [list, hello, java]
- list
- [list, hi, java]
- [java]
遍历 ArrayList
遍历集合有三种方式: 1.使用迭代器遍历;
- public static void main(String[] args) {
- // 创建ArrayList集合
- List<String> list=new ArrayList<>();
- // 使用add()方法添加元素
- list.add("list");
- list.add(1,"hello");
- list.add(2,"java");
- list.add("java");
- // 通过迭代器遍历集合
- Iterator<String> iterator = list.iterator();
- while(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- }
2.使用 foreach 遍历;
- public static void main(String[] args) {
- // 创建ArrayList集合
- List<String> list=new ArrayList<>();
- // 使用add()方法添加元素
- list.add("list");
- list.add(1,"hello");
- list.add(2,"java");
- list.add("java");
- // 通过foreach遍历集合
- for(String s:list){
- System.out.println(s);
- }
- }
3.使用 size() 方法获取集合长度,配合 for 循环遍历集合。
- public static void main(String[] args) {
- // 创建ArrayList集合
- List<String> list=new ArrayList<>();
- // 使用add()方法添加元素
- list.add("list");
- list.add(1,"hello");
- list.add(2,"java");
- list.add("java");
- // 通过 size() 方法遍历集合
- for(int x=0;x<list.size();x++){
- System.out.println(list.get(x));
- }
- }
以上三种方式执行结果:
- list
- hello
- java
- java
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 间编写程序代码,创建 ArrayList 集合并使用它的增删改查方法,具体要求如下:
- 接收给定的一行字符串(如:32 rfsd fwq g3r3qt t3q4t。);
- 通过空格(一个)切割字符串;
- 创建一个 ArrayList 集合;
- 将切割后的字符串元素添加至集合中;
- 删除集合的第一个和最后一个元素;
- 添加两个字符串:hello,educoder 至集合中;
- 修改集合的第三个元素,改为:list;
- 打印集合。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。
例: 测试输入:
- 32 rfsd fwq g3r3qt t3q4t qt ta
预期输出:
- [rfsd, fwq, list, t3q4t, qt, hello, educoder]
import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class CollTest { public static void main(String[] args) { // 请在Begin-End间编写代码 /********** Begin **********/ // 第一步:接收给定的一行字符串 Scanner in=new Scanner(System.in); String strs=in.nextLine(); // 第二步:切割字符串 String[] ser=strs.split(" "); // 第三步:创建集合 ArrayList<String> array=new ArrayList<String>(); // 第四步:往集合中添加元素 for(int i=0;i<ser.length;i++) { array.add(ser[i]); } // 第五步:删除第一个元素和最后一个元素 array.remove(0); array.remove(array.size()-1); // 第六步:往集合中添加hello和educoder array.add("hello"); array.add("educoder"); // 第七步:修改集合中第三个元素为list array.set(2,"list"); // 第八步:打印集合 System.out.println(array); /********** End **********/ } }