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方法,自己定义判断逻辑来判断自定义对象是否相等。
|
|