package cn.itcast_04;
import java.util.ArrayList; import java.util.Iterator;
/* * 需求:去除集合中自定义对象的重复值(对象的成员变量值都相同) * * 我们按照和字符串一样的操作,发现出问题了。 * 为什么呢? * 我们必须思考哪里会出问题? * 通过简单的分析,我们知道问题出现在了判断上。 * 而这个判断功能是集合自己提供的,所以我们如果想很清楚的知道它是如何判断的,就应该去看源码。 * contains()方法的底层依赖的是equals()方法。 * 而我们的学生类中没有equals()方法,这个时候,默认使用的是它父亲Object的equals()方法 * Object()的equals()默认比较的是地址值,所以,它们进去了。因为new的东西,地址值都不同。 * 按照我们自己的需求,比较成员变量的值,重写equals()即可。 * 自动生成即可。 */ public class ArrayListDemo3 { public static void main(String[] args) { // 创建集合对象 ArrayList array = new ArrayList();
// 创建学生对象 Student s1 = new Student("林青霞", 27); Student s2 = new Student("林志玲", 40); Student s3 = new Student("凤姐", 35); Student s4 = new Student("芙蓉姐姐", 18); Student s5 = new Student("翠花", 16); Student s6 = new Student("林青霞", 27); Student s7 = new Student("林青霞", 18);
// 添加元素 array.add(s1); array.add(s2); array.add(s3); array.add(s4); array.add(s5); array.add(s6); array.add(s7);
// 创建新集合 ArrayList newArray = new ArrayList();
// 遍历旧集合,获取得到每一个元素 Iterator it = array.iterator(); while (it.hasNext()) { Student s = (Student) it.next();
// 拿这个元素到新集合去找,看有没有 if (!newArray.contains(s)) { newArray.add(s); } }
// 遍历新集合 for (int x = 0; x < newArray.size(); x++) { Student s = (Student) newArray.get(x); System.out.println(s.getName() + "---" + s.getAge()); } } }
------------------------------------------------------------Student 类-------------
package cn.itcast_04;
public class Student { private String name; private int age;
public Student() { super(); }
public Student(String name, int age) { super(); this.name = name; this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; }
}
|