contains的底层是依赖equals方法,equals方法默认比较的是内存地址,所以如果需要清除重复书号的话需要重写equals方法,而通常也会重写hashCode方法
代码如下:
import java.util.ArrayList;
import java.util.Iterator;
class Book{
int id;
String name;
double prcie;
public Book(int id, String name, double prcie) {
super();
this.id = id;
this.name = name;
this.prcie = prcie;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "{书号"+this.id+"书名"+this.name+"价格"+this.prcie+"}";
}
@Override
public boolean equals(Object obj) {//重写equals方法一般还会重写hashCode方法
Book book = (Book)obj;
return this.id==book.id;
}
@Override
public int hashCode() {
return this.id;
}
}
class Demo{
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Book(112,"西游记",50));
list.add(new Book(115,"水浒传",45));
list.add(new Book(112,"三国演义",68));
list.add(new Book(118,"红楼梦",78));
ArrayList newList = clearRepeat(list);
System.out.println("集合的元素是:"+newList);
}
public static ArrayList clearRepeat(ArrayList OldList) {
//创建一个新的集合对象
ArrayList newList = new ArrayList();
//遍历旧集合的元素
//获取迭代器对象
Iterator it = OldList.iterator();
while(it.hasNext()) {
Book book = (Book)it.next();//从旧集合中取出元素,判断新集合中是否存在该元素
if(!newList.contains(book)) { //contains底层依赖了equals方法,默认比较的是内存地址 需要重写equals方法
//如果不包含这本书籍,那么则应该添加到新集合中
newList.add(book);
}
}
return newList;
}
}