黑马程序员技术交流社区
标题:
练习:去除集合里的重复对象
[打印本页]
作者:
fmi110
时间:
2015-7-28 11:30
标题:
练习:去除集合里的重复对象
tr
/*
需求:去除ArrayList集合中的重复对象。
*/
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name,int age){
this.name = name;
this.age = age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public boolean equals(Object obj){ //复写Object类中的比较方法
if(!(obj instanceof Person))
throw new RuntimeException("类型异常,非Person类");//throw抛出异常对象,是对象 而不是类名!!
Person p = (Person)obj;
System.out.println("调用Person对象的equals方法,与已存在的对象对比:"+p.getName()+":::"+p.getAge());
return p.getName().equals(this.name) && p.getAge() == this.age;
}
}
class ArrayListTest1
{
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Person("lili",21));
al.add(new Person("sasa",22));
al.add(new Person("lili",21));
al.add(new Person("lucy",18));
System.out.println("去重前:");
sop(al);
try
{
al = singleCollection(al);
System.out.println("去重后:");
sop(al);
}
catch (RuntimeException e)
{
System.out.println(e.toString());
System.out.println(e.getMessage());
}
}
public static ArrayList singleCollection(ArrayList al){
ArrayList newal = new ArrayList();
int i = 1;
for(Iterator it = al.iterator();it.hasNext();i++){
Object obj = it.next();//迭代器返回的是Object对象
if(!(newal.contains(obj))){
newal.add(obj);
System.out.println("新数组已添加第"+i+"个对象");
}
}
return newal;
}
public static void sop(ArrayList al){
Iterator it = al.iterator();
while(it.hasNext()){
Person p = (Person)it.next();//迭代器返回是Object对象,需向下转型
System.out.println(p.getName()+":::"+p.getAge());
}
}
}
/*
运行结果:
去重前:
lili:::21
sasa:::22
lili:::21
lucy:::18
新数组已添加第1个对象
调用Person对象的equals方法,与已存在的对象对比:lili:::21
新数组已添加第2个对象
调用Person对象的equals方法,与已存在的对象对比:lili:::21
调用Person对象的equals方法,与已存在的对象对比:lili:::21
调用Person对象的equals方法,与已存在的对象对比:sasa:::22
新数组已添加第4个对象
去重后:
lili:::21
sasa:::22
lucy:::18
由运行结果可知,集合的contains方法其实调用了对象的equals方法,来比较元素是否一样,
作为判断包含与否的依据。
*/
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2