如标题,解释都在代码注释中
主方法及目的
···
package cn.com.testCollection;
import java.util.Iterator;
import java.util.Scanner;
/**此类是用于测试List集合中的contains()方法
* contains()方法,是用于判断某个对象是否属于该集合中的元素
* 它的原理是:
* 1.遍历出该集合中的每一个元素,
* 2.调用每一个元素的equals()方法,来判断该对象是否与该遍历出元素是否是同一个
* 注意,这里说的是同一个对象,但在实际的场景中,是要判断对象中的内容是否一致,
* 比如一个班级中,来了一个学生叫花花牛,需要给他定一个以姓名为准的称号,如果班级里
* 已经有一个花花牛了,那么他的称号只能是 花花牛一,
* 显然,equals()方法是比较对象的地址是否一样,显然不行,应该比较对象的的name的内容
* 那么,这里就需要 改写 对象的 equals()方法了。详见 Student类中 重写的equals()方法。
* @author SZQ
*
*/
public class TestColContains {
static StudentCol sc = new StudentCol();
public static Scanner input;
public static void main(String[] args) {
Student st1 = new Student(1, "花花牛");
Student st2 = new Student(2, "小米");
Student st3 = new Student(3, "李磊");
Student st4 = new Student(4, "lucy");
Student st6 = new Student(6, "花花牛");
sc.studentSet.add(st1);
sc.studentSet.add(st2);
sc.studentSet.add(st3);
sc.studentSet.add(st4);
System.out.println("班级中已有的学生分别是");
for(Student ss : sc.studentSet){
System.out.println("学生是:"+ss.name);
}
System.out.println("请输入新学生的姓名:");
input = new Scanner(System.in);
String stuName = input.next();
Student newStu = new Student(5, stuName);
Iterator it = sc.studentSet.iterator();
int count = 0;
while(it.hasNext()){
if(it.next().equals(newStu)){
count++;
}
}
if(count > 0)
System.out.println("班级里已经存在了"+count+"个名字叫做"+newStu.name+"的同学");
System.out.println("新学生的称号是"+newStu.name+count);
main(args);
}
}
···
Student类,改写equals()方法
···
package cn.com.testCollection;
public class Student {
public int id;
public String name;
public Student(int id,String name) {
// TODO Auto-generated constructor stub
this.id = id;
this.name = name;
}
/**
*重写equals()方法
*
*/
@Override
public boolean equals(Object obj){
//首先判断是不是同一个对象
if(this == obj){
return true;
}
//判断是不是null, 注意,传入的参数可以为null,但是调用方法的对象不能null,
//否则会引起 空指针异常,也就不能调用改写的equals方法了。
if(obj == null){
return false;
}
if(!(obj instanceof Student)){
return false;
}
/*
* 既然不是同一个对象,不是null ,同时他也属于Student类的一个实例
* 那么接下来只需要 判断它的内容----姓名 ,是不是一样 ,就行了
*/
//先转换为 Student类的类型。
Student st = (Student) obj;
//判断name是不是空的
//如果判断多个属性,比如id一样也作为判断条件,只需将下面的代码再比葫//芦画瓢写一遍就行了
if(this.name == null){
if(st.name == null){
return true;
}else{
return false;
}
}else{
if(this.name.equals(st.name)){
return true;
}else{
return false;
}
}
}
}
···
存放学生类集合的类
···
package cn.com.testCollection;
import java.util.ArrayList;
import java.util.List;
public class StudentCol {
public List<Student> studentList;
public StudentCol() {
// TODO Auto-generated constructor stub
this.studentList = new ArrayList<Student>();
}
}
···