首先贴代码
import java.util.ArrayList;
import java.util.Iterator;
import chenlian.pojo.Person;
/*
* 要求: ArrayList存储自定义对象并去除重复值
* 我们认为同姓名和同年龄的人即为同一个人。
*
* 思路:
* 1、创建集合
* 2、创建集合元素
* 3、把元素存储至集合中
* 4、遍历判断是否有重复的对象
*/
public class Demo2 {
public static void main(String[] args) {
// 创建集合
ArrayList<Person> oldList = new ArrayList<Person>();
// 创建元素
Person p1 = new Person("韩菱纱", 18);
Person p2 = new Person("赵灵儿", 17);
Person p3 = new Person("唐雪见", 20);
Person p4 = new Person("赵灵儿", 19);
Person p5 = new Person("韩菱纱", 18);
// 把元素存储到集合中
oldList.add(p1);
oldList.add(p2);
oldList.add(p3);
oldList.add(p4);
oldList.add(p5);
// 创建新的集合存储没有重复的对象
ArrayList<Person> newList = new ArrayList<Person>();
// 遍历判断新集合中是否有重复的对象
Iterator<Person> it = oldList.iterator();
while (it.hasNext()) {
Person p = it.next();
// contains方法底层中依赖的是equals方法,所以需要在Person类中
// 重写Person类中的equals方法
if (!newList.contains(p)) {
newList.add(p);
}
}
//输出新的集合
System.out.println(newList);
}
}
/**
* 这是一个用户描述类
*
* @author 谢恒曦
*
*
*/
public class Person {
// 创建姓名属性
private String name;
// 创建年龄属性
private int age;
public Person() {
super();
}
public Person(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 String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
// 重写equals方法
public boolean equals(Object obj) {
// 提高效率,判断是否为对象自身
if (this == obj) {
return true;
}
// 提高健壮性,判断对象是否为本类
if (!(obj instanceof Person)) {
return false;
}
// 向下转型,方便操作
Person p = (Person) obj;
if (this.getName().equals(p.getName()) && p.getAge() == this.getAge()) {
return true;
}
return false;
}
}
这里的旧集合中 存在 p1 与 p5 的内容完全一致, p2 与 p4 姓名相同,年龄却不同
题目要求完全相同即判定为同一个人,所以重写了Person类中的equals方法。
效果图如下
|
|