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即可通過,但筆者建議理解後自己實踐

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章