【慕課筆記】第四章 JAVA中的集合框架(上) 第11節 通過Set集合管理課程

yxt_y發表於2016-02-26

第11節 通過Set集合管理課程



Set介面及其實現類——HashSet

Set是元素無序並且不可以重複的集合,被稱為集

HashSet——雜湊集,是Set的一個重要實現類


案例功能說明

1、提供備選課程

2、建立學生物件,並給該學生新增三門課程(新增在學生的courses——Set型別的屬性中)

顯示備選課程

迴圈三次,每次輸入課程ID

往學生的courses屬性中新增與輸入的ID匹配的課程

輸出學生選擇的課程


Set 只能用 foreach iterator 方法,因為是無序的,不能指定位置得到值
List 能用  foreach iterator get 方法


package com.imooc.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class SetTest {

	/**
	 * @param args
	 */
	public List<Course> coursesToSelect;
	
	public SetTest(){
		this.coursesToSelect=new ArrayList<Course>();
	}
	
	public void testAdd(){
		Course cr1=new Course("1","資料結構");
		coursesToSelect.add(cr1);
	//	Course temp=(Course)coursesToSelect.get(0);//物件存入集合都變成Object型別,取出時需要型別轉換
	//	System.out.println("新增了課程"+temp.id+":"+temp.name);
		
		Course cr2=new Course("2","C語言");
		coursesToSelect.add(0,cr2);
	//	Course temp1=(Course)coursesToSelect.get(0);
	//	System.out.println("新增了課程"+temp1.id+":"+temp1.name);
		
//		coursesToSelect.add(cr1);
//		Course temp6=(Course)coursesToSelect.get(2);//物件存入集合都變成Object型別,取出時需要型別轉換
//		System.out.println("新增了課程"+temp6.id+":"+temp6.name);
		
		//以下方法會丟擲陣列小標越界異常
		//Course cr3=new Course("3","計算機網路");
		//coursesToSelect.add(4,cr3);//目前陣列長度為2,只能訪問位置0、1,不能訪問位置3
		
		Course[] course={new Course("3","離散數學"),new Course("4","組合語言")};
		coursesToSelect.addAll(Arrays.asList(course));//將陣列轉換成List
//		Course temp2=(Course)coursesToSelect.get(3);
//		Course temp3=(Course)coursesToSelect.get(4);
//		System.out.println("新增了課程"+temp2.id+":"+temp2.name);
//		System.out.println("新增了課程"+temp3.id+":"+temp3.name);
		
		Course[] course1={new Course("5","高等數學"),new Course("6","大學英語")};
		coursesToSelect.addAll(2,Arrays.asList(course1));
//		Course temp4=(Course)coursesToSelect.get(2);
//		Course temp5=(Course)coursesToSelect.get(3);
//		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//		System.out.println("新增了課程"+temp4.id+":"+temp4.name);
//		System.out.println("新增了課程"+temp5.id+":"+temp5.name);

	
	}
	
	public void testForEach(){
		System.out.println("有如下課程待選(通過foreach遍歷):");
		for(Object obj:coursesToSelect){	//先定義一個變數,然後是所要遍歷的集合
			Course cr=(Course)obj;	//當一個物件存入的時候,型別是忽略的;取出的時候往往需要強制轉換
			System.out.println("課程"+cr.id+":"+cr.name);	
		}
	}
	
	public void testForEachForSet(Student student){
		System.out.println("共選擇了"+student.courses.size()+"門課程");
		for(Course cr:student.courses){
			//列印輸出,學生所選的課程
			System.out.println("課程"+cr.id+":"+cr.name);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SetTest st=new SetTest();
		st.testAdd();
		st.testForEach();
		Student student=new Student("1","小明");
		System.out.println("歡迎學生"+student.name+"來選課!");
		//建立一個Scanner物件,用來接收從鍵盤輸入的課程ID
		Scanner console=new Scanner(System.in);
		
		for(int i=0;i<3;i++){
			System.out.println("請輸入課程ID");
			String courseID=console.next();
			for(Course cr:st.coursesToSelect){
				if(cr.id.equals(courseID)){
					student.courses.add(cr);
					student.courses.add(cr);//測試重複課程(Set集是不可重複的)
				//Set中,新增某個物件,無論新增多少次,最終只會保留一個該物件
				//並且保留的是第一次新增的那一個 
				}
			}
		}
		
		//列印輸出,學生所選的課程
		st.testForEachForSet(student);
		
		
	}

}


相關文章