黑马程序员技术交流社区

标题: 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方法,为了集合的打印输出
  1. import java.util.*;
  2. class Person
  3. {
  4.         private String name=null;
  5.         private int age;
  6.         Person(String name,int age)
  7.         {
  8.                 this.name=name;this.age=age;
  9.         }
  10.         public boolean equals(Object obj)
  11.         {
  12.                 Person p=(Person)obj;
  13.                 return this.name==p.getName()&&this.age==p.getAge();
  14.         }
  15.         public String toString()
  16.         {
  17.                 return "("+name+","+age+")";
  18.         }
  19.         public String getName(){return name;}
  20.         public int getAge(){return age;}
  21. }
  22. class ArrayListTest
  23. {
  24.         public static void main(String[] args)
  25.         {
  26.                
  27.                 //去除ArrayList中重复的元素(此处元素为String类型)
  28.                 ArrayList al = new ArrayList();
  29.                 al.add("java01");
  30.                 al.add("java01");
  31.                 al.add("java01");
  32.                 al.add("java02");
  33.                 al.add("java02");
  34.                 al.add("java02");
  35.                
  36.                 ArrayList temp=new ArrayList();
  37.                 for(Iterator it = al.iterator();it.hasNext();)
  38.                 {
  39.                         Object obj=it.next();
  40.                         if(!temp.contains(obj))
  41.                                 temp.add(obj);
  42.                 }
  43.                 System.out.println(temp);
  44.                

  45.                 //去除人对象中同名同岁的元素
  46.                 ArrayList alt=new ArrayList();
  47.                 alt.add(new Person("helong",22));
  48.                 alt.add(new Person("helong",24));
  49.                 alt.add(new Person("ldy",22));
  50.                 alt.add(new Person("helong",22));
  51.                 alt.add(new Person("ldy",24));
  52.                 alt.add(new Person("ldy",22));
  53.                 alt.add(new Person("xiaoming",22));
  54.                 alt.add(new Person("helong",22));
  55.                 alt.add(new Person("helong",24));
  56.                 alt.add(new Person("ldy",22));
  57.                 alt.add(new Person("helong",22));
  58.                 alt.add(new Person("ldy",24));
  59.                 alt.add(new Person("ldy",22));
  60.                 alt.add(new Person("xiaoming",22));
  61.                
  62.                 ArrayList temp1=new ArrayList();
  63.                 for(Iterator it = alt.iterator();it.hasNext();)
  64.                 {
  65.                         Person p=(Person)(it.next());
  66.                         if(!temp1.contains(p))
  67.                                 temp1.add(p);
  68.                 }
  69.                 System.out.println(temp1);
  70.         }
  71. }
复制代码
在ArrayList中的contains方法内部实现方式:
1.内部语句return indexOf(obj)>=0;来判断是否存在元素
2.indexOf内部是使用equals判断是否存在
因此当我们需要在contains中传入自定义对象时,就需要复写equals方法,自己定义判断逻辑来判断自定义对象是否相等。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2