【慕课笔记】第六章 JAVA中的集合框架(下) 第2节 学生选课——判断Set中课程是否存在

第2节 学生选课——判断Set中课程是否存在




Set中要同时满足hashCode()和equals(obj)两种方法,才能判断存在。(两种方法需要重写)


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;
	private Scanner scanner;
	public Student student;
	
	public SetTest(){
		this.coursesToSelect=new ArrayList<Course>();
		scanner=new Scanner(System.in);
	}
	
	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 void createStudentandSelectCours(){
		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:coursesToSelect){
				if(cr.id.equals(courseID)){
					student.courses.add(cr);
					student.courses.add(cr);//测试重复课程(Set集是不可重复的)
				//Set中,添加某个对象,无论添加多少次,最终只会保留一个该对象
				//并且保留的是第一次添加的那一个 
				}
			}
		}
		
		//打印输出,学生所选的课程
		testForEachForSet(student);
		
	}
	
	//测试List的contains方法
	public void testListContains(){
		//取得备选课程序列的第0个元素
		Course course=coursesToSelect.get(0);
		System.out.println("取得课程"+course.name);
		System.out.println("备选课程中是否包含课程:"+course.name+","+coursesToSelect.contains(course));
		//创建一个新的课程对象(与course拥有相同id和名称,但是对象不同)
		Course course2=new Course(course.id,course.name);
		System.out.println("新创建课程"+course2.name);
		System.out.println("备选课程中是否包含课程:"+course2.name+","+coursesToSelect.contains(course2));
		//有时只知道课程名称,通过名称判断是否包含这门课程,
		//可通过for循环遍历名称,但是比较麻烦
		//依然可以通过contains判断是否包含这门课程,重写equals方法即可。
	}
	
	//测试Set的contains方法
	public void testSetContains(){
		System.out.println("请输入学生已选的课程名称:");
		String name=scanner.next();
		//创建一个新的课程对象
		Course course=new Course();
		course.name=name;
		System.out.println("新创建课程:"+course.name);
		System.out.println("备选课程中是否包含课程"+course.name+","+student.courses.contains(course));
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SetTest st=new SetTest();
		st.testAdd();
		st.testForEach();
		st.createStudentandSelectCours();
//		st.testListContains();

		st.testSetContains();

		
	}

}

自动生成重写(勾选name+勾选使用instanceof比较类型)

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Course))
			return false;
		Course other = (Course) obj;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值