您的位置:首页 > 编程语言 > Java开发

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

2016-02-29 17:33 549 查看
第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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: