public void testListContains() { //方法
course course=coursesToSelect.get(0);//将元素从coursesToSelect中取出放到course中
System.out.println("取得课程:"+course.name);//name为course的属性
System.out.println("集合中是否包含此课程:"+course.name+"\n"+coursesToSelect.contains(course));//使用contains方法查看是否有此对象
course course2=new course(course.id, course.name);//另外新建一个不同的course的对象
System.out.println("新建课程:"+course2.name);
System.out.println("集合中是否包含此课程:"+course2.name+"\n"+coursesToSelect.contains(course2));
}
第一个查询返回true
第二个查询返回false
是因为第二个是新建的course对象,并非从元素中取出的。
同时也说明contains方法通过历遍来使用equal方法对比元素。
我们可以通过重写一次equal方法来达到用字符串就能查询课程。
@Override
public boolean equals(Object obj) {//将对象传入时是将其转换为Object类传入
/*判断地址 */
if(this==obj) {//调用该方法的对象如果内存地址等于传入的对象则返回真。
return true;
}
/*判断传入的对象值是否为空*/
if(obj==null) {//为空时直接返回假
return false;
}
/*判断传入的对象是否属于Course类型的对象*/
if(!(obj instanceof Course)) {//如果不属于Course类则返回假
return false;
}
/*当传入对象与调用对象不同地址,
* 也不是空值,
* 也不属于Course类时则需要将obj强转为Course(从集合中取出时为object类)
*/
Course course=(Course) obj;
/*判断对象的属性值是否为空*/
if(this.name==null) {//判断调用对象的name信息是否为空
if(course.name==null) {//判断传入对象的name信息是否为空
return true;//都为空则返回真
}
else {
return false;//只有传入的对象name为空则返回假
}
}
else {
if(this.name.equals(course.name)) {//如果都不为空则对比name的字符串是否一样
return true;//一样则返回真
}
else {
return false;//否则假
}
}
}
重写之后使用输入的文本查询课程
public void testListContains() {
Course course=coursesToSelect.get(0);
System.out.println("查询课程:"+course.name);
System.out.println("集合中是否包含此课程:"+course.name+"\n"+coursesToSelect.contains(course));
//根据用户的输入课程名称反馈查询结果
System.out.println("请输入需要查询的课程名称");
String name=console.next();
Course course2=new Course();
course2.name=name;
System.out.println("查询课程:"+course2.name);
System.out.println("集合中是否包含此课程:"+course2.name+"\n"+coursesToSelect.contains(course2));
}
运行结果:
查询课程:C语言
集合中是否包含此课程:C语言
true
请输入需要查询的课程名称
C语言
查询课程:C语言
集合中是否包含此课程:C语言
true