【慕课笔记】第六章 JAVA中的集合框架(下) 第2节 学生选课——判断Set中课程是否存在
2016-02-29 17:33
549 查看
第2节 学生选课——判断Set中课程是否存在
Set中要同时满足hashCode()和equals(obj)两种方法,才能判断存在。(两种方法需要重写)
自动生成重写(勾选name+勾选使用instanceof比较类型)
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; }
相关文章推荐
- Java ServletContext 详解
- java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit异常的解决方法
- java中的内部类总结
- java泛型
- java Timer
- 【Dubbo】Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
- Struts2的声明式异常处理
- Java线程池《ThreadPoolExecutor中策略的选择与工作队列的选择》
- maven,spring,mybatis集成错误
- 老李分享:JAVA性能监控工具
- spring拦截器登录
- 读配置文件可以保持顺序的 Java Properties 类
- 老李分享:《Java Performance》笔记2——JVM命令行选项及垃圾收集日志解析 2
- [疯狂Java笔记]AWT组件和容器的概念
- spring mvc <mvc:annotation-driven>配置使用出现故障
- 老李分享:《Java Performance》笔记2——JVM命令行选项及垃圾收集日志解析 1
- 老李分享:《Java Performance》笔记1——性能分析基础
- Java中的Collection和Map(三)--Map体系
- maven 转myeclipse eclipse 项目 命令
- 使用Java构建微服务