黑马程序员技术交流社区
标题:
ArrayList练习(1.去除ArrayList中重复元素;2.去除自定义元素)
[打印本页]
作者:
Nemo
时间:
2015-6-17 17:44
标题:
ArrayList练习(1.去除ArrayList中重复元素;2.去除自定义元素)
ArrayList练习:
去除ArrayList中重复的元素
1.由第一个开始向后比较,如果相同就删掉
2.再从第二个开始向后比较,相同就删掉
。。。。
将自定义对象作为元素存到ArrayList中,并去除相同元素
例如存入人对象,同名同岁的视为相同元素。
1.关键复写Object的equals方法,注意该方法的参数是Object类型
否则就成了重载了
我们是使用contains判断集合中是否包含某个元素,那么contains方法内部其实是使用indexOf>=0来比较的。
而indexOf内部是使用了equals方法的。
因此我们复写equals就可以达到目的。
Tip:其实remove等很多方法内部都是使用了equals方法的。
2.复写Object的toString方法,为了集合的打印输出
import java.util.*;
class Person
{
private String name=null;
private int age;
Person(String name,int age)
{
this.name=name;this.age=age;
}
public boolean equals(Object obj)
{
Person p=(Person)obj;
return this.name==p.getName()&&this.age==p.getAge();
}
public String toString()
{
return "("+name+","+age+")";
}
public String getName(){return name;}
public int getAge(){return age;}
}
class ArrayListTest
{
public static void main(String[] args)
{
//去除ArrayList中重复的元素(此处元素为String类型)
ArrayList al = new ArrayList();
al.add("java01");
al.add("java01");
al.add("java01");
al.add("java02");
al.add("java02");
al.add("java02");
ArrayList temp=new ArrayList();
for(Iterator it = al.iterator();it.hasNext();)
{
Object obj=it.next();
if(!temp.contains(obj))
temp.add(obj);
}
System.out.println(temp);
//去除人对象中同名同岁的元素
ArrayList alt=new ArrayList();
alt.add(new Person("helong",22));
alt.add(new Person("helong",24));
alt.add(new Person("ldy",22));
alt.add(new Person("helong",22));
alt.add(new Person("ldy",24));
alt.add(new Person("ldy",22));
alt.add(new Person("xiaoming",22));
alt.add(new Person("helong",22));
alt.add(new Person("helong",24));
alt.add(new Person("ldy",22));
alt.add(new Person("helong",22));
alt.add(new Person("ldy",24));
alt.add(new Person("ldy",22));
alt.add(new Person("xiaoming",22));
ArrayList temp1=new ArrayList();
for(Iterator it = alt.iterator();it.hasNext();)
{
Person p=(Person)(it.next());
if(!temp1.contains(p))
temp1.add(p);
}
System.out.println(temp1);
}
}
复制代码
在ArrayList中的contains方法内部实现方式:
1.内部语句return indexOf(obj)>=0;来判断是否存在元素
2.indexOf内部是使用equals判断是否存在
因此当我们需要在contains中传入自定义对象时,就需要复写equals方法,自己定义判断逻辑来判断自定义对象是否相等。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2