ArraList去除集合中自定义对象元素的重复值(对象的成员变量值相同)
Contains()方法判断是否包含,底层依赖于equals方法.remove方法也是依赖于equals方法。
package com.xlj.bean;
public class Person {
private String name;
private int age;
public Person() {
super();
}
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 + "]";
}
@Override
public boolean equals(Object arg0) {
Person p =(Person) arg0;
return this.name.equals(p.name) && this.age==p.age;
}
}
package test;
import java.util.ArrayList;
import java.util.Iterator;
import com.xlj.bean.Person;
public class Demo2_ArrayList {
//注意事项:重写equals()方法
//Contains()方法判断是否包含,底层依赖于equals方法
public static void main(String[] args) {
ArrayList list =new ArrayList();//创建集合对象
list.add(new Person("方一凡",17));
list.add(new Person("方一凡",17));
list.add(new Person("乔英子",18));
list.add(new Person("林磊儿",16));
list.add(new Person("林磊儿",16));
list.add(new Person("林磊儿",16));
list.add(new Person("季扬扬",19));
list.add(new Person("乔英子",18));
ArrayList newList=getSingle(list);//调用方法去除重复
System.out.println(newList);
// list.add(new Person("方一凡",17));
// System.out.println(list);
}
public static ArrayList getSingle(ArrayList list) {
ArrayList newList = new ArrayList<>(); // 创建新集合
Iterator it = list.iterator(); // 根据传入的集合(老集合)获取迭代器
while (it.hasNext()) { // 遍历老集合
Object obj = it.next(); // 记录每一个元素
if (!newList.contains(obj)) { // 如果不包含
newList.add(obj); // 添加到新集合
}
}
return newList;
}
}
总结:如果不重写equals方法比较的就是地址,因为每个对象的地址都是不一样的所以remove不了。