package cn.itnan.ArrayList;
/**
*
* @author Stone
* 去除集合中自定义对象
*/
/*
* 思路:造一个新的集合,遍历旧的集合,新集合和旧集合进行比较,如果没有
* 就进来,如果有。就不进来。但是这个不行,去除不了
*
* 为什么呢?
* 问题出现在了 判断上,判断都给放过了,所以iu出现问题了
* 因为contains方法的底层是equals,但是 Student对象没有equals方法,则用的
* 是父亲的Objct的equals()方法,
* Object()和equals()默认的就是比较地址值,所以就出毛病了。
* new的地址值都不同。
* 怎么解决呢
* 根据需求重写equals的方法就行 。
* @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;
*/
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListTest3 {
public static void main(String[] args) {
//创建集合
ArrayList list = new ArrayList();
//创建对象
Student st1 = new Student("nanjieying",28);
Student st2 = new Student("nanjieying",26);
Student st3 = new Student("nanjieying",28);
Student st4 = new Student("nanjieying",25);
Student st5 = new Student("nanjieying",24);
//添加元素
list.add(st1);
list.add(st2);
list.add(st3);
list.add(st4);
list.add(st5);
//创建新的集合
ArrayList list2 = new ArrayList();
//进行判断遍历
Iterator it = list.iterator();
while(it.hasNext()) {
Student s = (Student)it.next();
if(!list2.contains(s)) {
list2.add(s);
}
}
//遍历新的集合
for(int x = 0;x<list2.size();x++) {
Student s = (Student) list2.get(x);
System.out.println(s);
}
}
}
集合中去除相同类型的对象
最新推荐文章于 2021-12-03 10:01:10 发布