EduCoder-Java面向对象 -集合框架的实现代码(关卡一到关卡三)包括对问题的总结

我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。

在这里插入图片描述

目录:

  • 对实训题目考察的问题的总结
  1. 第一关
  2. 第二关
  3. 第三关
  4. 第四关
  5. 第五关
  6. 第六关

对实训题目的总结

这次的实训题目不是很难,主要就是实践了常用集合的用法。其中有一点需要注意。与成员类中的封装属性一样
ArrayList的get方法只能或得对应的值,但不具备输出功能。如果想要输出应当用System.out.println()
将get方法或得的值输出。

第1关:集合的基本使用

任务描述
本关任务:创建集合并添加数据。

相关知识
为了完成本关任务你需要知道:

集合是什么
JAVA中的集合:是一个工具类,就像是容器,存储任意数量具有共同属性的集合。

在这里插入图片描述

例如:购物车是商品的集合,军队是军人的集合。

为什么使用集合

我们已经知道集合就是能存储大量数据的一个容器,但是咱们在Java入门的时候学过数组,数组也是一个能存储
大量数据的容器,好像也可以满足日常开发的需求,那我们为什么要使用集合呢?

在这里插入图片描述
如果说之前学习的数组是一根打狗棒的话,那我们将要学习的集合就可以看做是一根如意金箍棒了。

集合和数组有如下区别:

数组的长度固定,集合的长度可变;

数组只能通过下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象。

怎么创建集合
我们来创建一个简单的集合:

  1. 导包

    import java.util.ArrayList;

  2. 创建集合

    ArrayList list = new ArrayList();
    如何向集合中添加数据
    list.add(“hello”);
    list.add(2018);
    编程要求
    请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,创建ArrayList集合并且向集合中添加数据,具体要求如下:

     添加字符串类型数据:https:www.educoder.net;
     
     添加double类型数据:2018.423;
     
     在方法中返回你创建的集合对象。
    

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

https:www.educoder.net
2018.423

实现代码

package step1;

import java.util.ArrayList;	//导包

public class HelloWorld {
    
	@SuppressWarnings("unchecked") 
	public ArrayList getList() {
		/********** Begin **********/
		
		ArrayList list = new ArrayList();
        list.add("https:www.educoder.net");
        list.add("2018.423");

		return list;
		
		
		/********** End **********/
	}
	
}

第2关:ArrayList集合的增删改查

任务描述
本关任务:完成对集合中数据的增删改查。

相关知识
为了完成本关任务,你需要学习:

  1. 获取集合中的数据
    使用get(index)即可获取集合中的数据,和数组相同,index为角标,从0开始。
    例如:

     ArrayList list = new ArrayList();
     list.add("张无忌");
     list.add(18);
     String name = (String)list.get(0);
     int age = (int)list.get(1);
     System.out.println("姓名:" + name + " 年龄:" + age);
    

输出:

		姓名:张无忌 年龄:18

看到这里你可能会有疑问:

String name = (String)list.get(0);
为什么使用集合的get()方法获取到数据之后还需要(String)强转数据类型呢?

这是因为我们在定义集合的时候并没有给定一个数据类型,所以集合中的元素,可以是任意类型的对象(Object),如果把某个对象放入集合,则会忽略它的类型,而把它当做Object类处理。

这样我们在从集合中获取数据的时候,默认也会将它看做是Object类型,所以我们在使用的时候需要强转成对应类型。

修改集合中的数据
使用set(index, element)方法即可修改集合中的数据,第一个参数代表索引,即修改集合第几个位置的元素,index从0开始,第二个参数element是要修改的数据。

例如:

ArrayList list = new ArrayList();
list.add("张无忌");
list.add(18);
String name = (String)list.get(0);
int age = (int)list.get(1);
System.out.println("姓名:" + name + " 年龄:" + age);
list.set(0,"张三丰");    //修改集合的第一个元素
name = (String)list.get(0);
System.out.println("姓名:" + name + " 年龄:" + age);

输出:

姓名:张无忌 年龄:18
姓名:张三丰 年龄:18

删除集合中的数据

使用remove(index)或remove(element)方法即可删除元素,remove方法是一个重载的方法,第一种可以根
据索引位置删除元素,第二种可以根据元素的引用来删除集合中对应的元素。

如下:

ArrayList list = new ArrayList();
list.add("张无忌");
list.add(18);
//List集合的toString可以输出数组中所有的数据
System.out.println(list.toString()); 
Object obj1 = list.get(0);
list.remove(obj1); //根据元素的引用删除元素
System.out.println(list.toString());
list.remove(0);    //根据索引删除元素
System.out.println(list.toString());

输出:

[张无忌, 18]
[18]
[]

请你思考一个问题:

ArrayList list = new ArrayList();
list.add(“张无忌”);
list.add(18);
对于上述代码,要删除所有元素,应该使用remove(0),remove(0)还是remove(0),remove(1)?

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

删除集合的第一个和最后一个元素;

添加两个字符串:hello,educoder至集合中;

修改集合的第三个元素,改为:list;

输出集合中所有的元素。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:

4
张三
李四
王五
赵六

预期输出:

李四
王五
list
educoder

提示,获取数组的长度:

ArrayList list = new ArrayList();
list.add(1);
list.add(3);
System.out.println(list.size());

输出:2

答案

package step2;

import java.util.ArrayList;
import java.util.Scanner;

public class HelloWorld {
	
    @SuppressWarnings("unchecked")
	public static void main(String[] args) {
		//获取输入的数据并添加至集合
		Scanner sc = new Scanner(System.in);
		ArrayList list = new ArrayList<>();
        int length = sc.nextInt();
		for(int i =0 ; i< length; i++){
			list.add(sc.next());
		}
		/********** Begin *********/
		
		list.remove(0);
        list.remove(list.size()-1);
        list.add("hello");
        list.add("educoder");
        list.set(2,"list");
        for(int i = 0;i<list.size();i++){
            System.out.println(list.get(i));
        }

		
		
		
		
		
		/********** End **********/
	}
}

第3关:集合的体系结构

编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

分别定义HashSet、ArrayList、LinkedList、HashMap集合。并向每一个集合中添加www.educoder.net,Map集合的key设置为address,最后将每一个集合返回。
测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:无
预期输出:

www.educoder.net
www.educoder.net
www.educoder.net
www.educoder.net

答案

package step3;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

public class HelloWorld {
	
	public HashSet getHashSet(){
		/********** Begin **********/
		
        //HashSet set = new HashSet();
        HashSet set = new HashSet();
        set.add("www.educoder.net");
        return set;
		
		
		
		
		/********** End **********/
	}
	
	public ArrayList getArrayList(){
		/********** Begin **********/
		
		ArrayList list = new ArrayList();
        list.add("www.educoder.net");
		
		return list;
		
		/********** End **********/
	}
	
	public LinkedList getLinkedList(){
		/********** Begin **********/
		
		LinkedList list = new LinkedList();
        list.add("www.educoder.net");
		
		
		return list;
		/********** End **********/
	}
	
	public Map getHashMap(){
		/********** Begin **********/
		
		Map list = new HashMap();
        list.put("address","www.educoder.net");
        return list; 
		
		
		
		/********** End **********/
	}	
	
}

第4关:泛型

任务描述
本关任务:使用泛型创建集合对象。

相关知识
为了完成本关任务,你需要掌握:

  1. 什么是泛型
    什么是泛型呢?简单的来说,泛型可以理解为:类型参数,那什么又是类型参数呢?

    我们知道一个方法void hello(String name)如果指定了一个字符串类型的参数,那方法的调用者就只能传递String类型的参数才能正确的使用这个方法了,否则就报错,其实泛型也是一样,只不过在这里泛型用在集合上,即指定集合中只能放某一种类型的元素。

在这里插入图片描述

你要往ATM机中存钱,就只能放毛爷爷,而不能放冥币,这就是泛型,指定只能用一种类型
在这里插入图片描述

  1. 如何使用泛型
    泛型使用的是一对尖括号定义的,如:List 指定的就是在List集合中只能放String类型的数据。

接下来我们来一个对比评测,看一看使用泛型和不使用泛型的区别。

不使用泛型:

List list1 = new ArrayList();
list1.add("www.educoder.net");
String str1 = (String)list1.get(0);

使用泛型:

List<String> list2 = new ArrayList<String>();
list2.add("www.educoder.net");
String str2 = list.get(0);    //可以发现在这里我们不用强转数据类型了

当然泛型不仅仅只有这么一点用途,在开发中处处可见泛型,在之后的章节中我们会更深一步的了解。

可能你会有疑问,为什么我要使用泛型啊,使用泛型有什么好处呢?
答:好处如下:

类型安全,通过知道使用泛型定义的变量的类型限制,编译器可以更有效地提高Java程序的类型安全;

消除强制类型转换,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。所有的强制转换都是自动和隐式的;

提高性能。

编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

创建一个只能存储String类型数据的List集合;

将程序输入的数据存入List集合中;

输出集合中所有的数据。

提示:list.size()方法可以获取集合的长度。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

测试输入:

张三
李四
王五

预期输出:

集合的第1个数据为:张三
集合的第2个数据为:李四
集合的第3个数据为:王五

答案

package step4;

import java.util.*;

public class HelloWorld {
	
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		//程序会输入三次数据
		/********** Begin **********/
		
		List<String> list = new ArrayList<String>();
        list.add(sc.next());
        list.add(sc.next());
        list.add(sc.next());
        for(int i = 0;i<list.size();i++){
            System.out.println("集合的第"+(i+1)+"个数据为:"+list.get(i));
        }
		
		
		
		/********** End **********/
	}
	
}

第5关:Map集合的增删改查

任务描述
本关任务:对Map集合进行增删改查操作。

  1. Map集合的特点
    有三点需要你记住:

    Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够根据key快速查找value;

    键(key)值不可重复,值(value)是可以的,通过key可以查找value;

    Map支持泛型,形式如:Map<K,V>。

  2. 如何操作Map集合
    1)定义和添加数据:Map集合支持泛型,所以我们定义的时候一般会带有泛型,公式:Map<K,V>,K和V可以是指定为任何对象,注意:泛型指的是类,也就是K和V只能是对象而不能是基础数据类型。

    2)删除、修改和获取数据。

    Map<String,String> map = new HashMap<String,String>();
    map.put(“name”,“张三”);
    map.put(“sex”,“男”);
    System.out.println(“姓名:” + map.get(“name”) + “性别:” + map.get(“sex”));
    //修改数据 使用 map.put(key) 方法
    map.put(“name”,“李四”);//因为key不能重复,所以修改数据和添加数据使用的同一个方法
    System.out.println(“姓名:” + map.get(“name”) + “性别:” + map.get(“sex”));
    //删除数据 使用 map.remove(key)方法
    map.remove(“name”);
    System.out.println(map.toString());//map.toString方法可以直接输出map集合中的数据
    输出结果:

    姓名:张三性别:男
    姓名:李四性别:男
    {sex=男}

编程要求
请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下:

向menuDict集合中添加一道菜名lamb,它的价格是50;

获取menuDict集合中的fish的价格并打印出来;

将menuDict集合中的fish的价格改为100;

删除menuDict集合中noodles这道菜;

输出新的menuDict菜单。

测试说明
补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

pizza
40
noodles
30
carrot
20
turkey
34
fish
37

预期输出:

37
{pizza=40,turkey=34,fish=100,lamb=50,carrot=20}

答案

package step5;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class HelloWorld {

	public static void main(String[] args) {
		Map<String, Integer> menuDict = new HashMap<>();
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < 5; i++) {
			menuDict.put(sc.next(),sc.nextInt());
		}
		/********** Begin **********/
		menuDict.put("lamb",50);
        System.out.println(menuDict.get("fish"));
        menuDict.put("fish",100);
        menuDict.remove("noodles");
        System.out.println(menuDict.toString());
		
		
		
		
		
		
		/********** End **********/
	}
	
}

第6关:选择题

任务描述
本关任务:根据所学知识完成选择测试题。

相关知识

编程要求

测试说明

答案

1.
在Java中,以下(C )类的对象以键值对(key-value)的方式存储对象

A、java.util.List
B、java.util.ArrayList
C、java.util.HashMap
D、java.util.LinkedList

以上代码直接cv即可通过,但笔者建议理解后自己实践

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45791445/article/details/106243457