A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package collection;

import java.util.ArrayList;
import java.util.Iterator;


public class ArrayListDemo2
{
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }
        public static void main(String[] args)
        {
                ArrayList al=new ArrayList();
                al.add(new Person("lisi01",30));
                al.add(new Person("lisi02",32));
                al.add(new Person("lisi02",32));
                al.add(new Person("lisi03",33));
                al.add(new Person("lisi04",35));
                al.add(new Person("lisi04",35));
               
               
                al=singleElement(al);
                Iterator it=al.iterator();
               
                while(it.hasNext())
                {
                       
                        Person p=(Person)it.next();
                        sop(p.getName()+"::"+p.getAge());
                }

        }
        public static ArrayList singleElement(ArrayList al)
        {
                //定义一个临时容器
                ArrayList newAl=new ArrayList();
               
                Iterator it=al.iterator();
               
                while(it.hasNext())
                {
                        Object obj=it.next();
                       
                        if(!newAl.contains(obj))
                                newAl.add(obj);
                }
                return newAl;
               
        }
}


        class Person {
                private int age;
                private String name;
                Person(String name,int age)
                {
                        this.name=name;
                        this.age=age;
                }
                public boolean equals(Object obj)
                {
                       
                       
                        if(!(obj instanceof Person))
                                return false;
                        Person p=(Person)obj;
                        System.out.println(this.name+"......"+p.name);
                        return this.name.equals(p.name)&&this.age==p.age;
                }
                public String getName()
                {
                        return name;
                }
                public int getAge()
                {
                        return age;
                }

        }
是怎样实现去除重复元素的,越详细越好

4 个回复

倒序浏览
朋友我帮你注释了一下,不明白可以PM我
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo2 {
public static void sop(Object obj) {
  System.out.println(obj);
}
public static void main(String[] args) {
  ArrayList<Object> al = new ArrayList<Object>();
  al.add(new Person("lisi01", 30));
  al.add(new Person("lisi02", 32));
  al.add(new Person("lisi02", 32));
  al.add(new Person("lisi03", 33));
  al.add(new Person("lisi04", 35));
  al.add(new Person("lisi04", 35));
  al = singleElement(al);// 使用相同类型的集合变量来接收新的集合
  Iterator<Object> it = al.iterator();// 仍旧是对于新鲜集合的迭代
  while (it.hasNext())// 仍旧是对于新集合的迭代
  {
   Person p = (Person) it.next();
   sop(p.getName() + "::" + p.getAge());
  }
}
public static ArrayList<Object> singleElement(ArrayList<Object> al) {
  // 定义一个临时容器
  ArrayList<Object> newAl = new ArrayList<Object>();
  Iterator<Object> it = al.iterator();// 对于传进来的集合建一个迭代器对象
  while (it.hasNext()) {
   Object obj = it.next();// 对于传进来的集合进行对象的迭代
   if (!newAl.contains(obj))// 如果新的集合中不包含这个对象,
    newAl.add(obj);// 则把这个对象加入新的集合中(这样新的集合就不会有重复的对象)
  }
  return newAl;
}
}
class Person {
private int age;
private String name;
Person(String name, int age) {
  this.name = name;
  this.age = age;
}
public boolean equals(Object obj)// 重写equals方法
{
  if (!(obj instanceof Person))
   return false;
  Person p = (Person) obj;
  // System.out.println(this.name+"......"+p.name);
  return this.name.equals(p.name) && this.age == p.age;// name和age都相同才相同
}
public String getName() {
  return name;
}
public int getAge() {
  return age;
}
}

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报

评分

参与人数 1技术分 +1 收起 理由
黑马张扬 + 1

查看全部评分

回复 使用道具 举报
if(!newAl.contains(obj))
                                newAl.add(obj);
                }
newAl.add(obj);


这个简单来说既是,利用集合容器的contains方法来看,你看啊,你有个容器是吧,有元素是吧,(这里就算有重复的也没关系),然后你创建了一个过滤重复元素的方法,里面新建了容器,并带有参数,你把要过滤重复元素的容器传进来,和里面的元素contains下,看下里面那个里面包不包含外面那个传进来的容器里面的元素,这时候里面的容器是空的。
对传进来的容器,进行遍历,如果包含不存入,如果不包含就存入,当遍历完后,剩下的就是 唯一的,最后是返回的是新容器,但是重复的已经过滤掉了。过滤完毕,所以你看到的是过滤掉的。
回复 使用道具 举报
  1. package collection;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;


  4. public class ArrayListDemo2
  5. {
  6.         public static void sop(Object obj)
  7.         {
  8.                 System.out.println(obj);
  9.         }
  10.         public static void main(String[] args)
  11.         {
  12.                 ArrayList al=new ArrayList();//创建一个容器  将下列元素放入容器中
  13.                 al.add(new Person("lisi01",30));
  14.                 al.add(new Person("lisi02",32));
  15.                 al.add(new Person("lisi02",32));
  16.                 al.add(new Person("lisi03",33));
  17.                 al.add(new Person("lisi04",35));
  18.                 al.add(new Person("lisi04",35));
  19.                
  20.                
  21.                 al=singleElement(al);//调用singleElement方法  将al中不重复的元素返回
  22.                 Iterator it=al.iterator();
  23.                
  24.                 while(it.hasNext())//使用迭代器
  25.                 {
  26.                         
  27.                         Person p=(Person)it.next();//因为要使用Peson类的特有方法  所以要向下转型
  28.                         sop(p.getName()+"::"+p.getAge());
  29.                 }

  30.         }
  31.         public static ArrayList singleElement(ArrayList al)
  32.         {
  33.                
  34.                 ArrayList newAl=new ArrayList();//定义一个临时容器,用来存放不包含的元素
  35.                
  36.                 Iterator it=al.iterator();
  37.                
  38.                 while(it.hasNext())//使用迭代器
  39.                 {
  40.                         Object obj=it.next();
  41.                         
  42.                         if(!newAl.contains(obj))//contains方法依赖于equals方法 所以先前复写equals方法
  43.                                                                         //用来比较元素内容是否相同,contains方法用于判断临时容器newAl中是否包含指定的元素obj 如果newAl中包含
  44.                                                                                                 //obj
  45.                                 newAl.add(obj);//如果不包含  那么就将obj放入newAl中
  46.                 }
  47.                 return newAl;//将容器newAl返回,存放的为al中不重复的元素
  48.                
  49.         }
  50. }


  51.         class Person {
  52.                 private int age;
  53.                 private String name;
  54.                 Person(String name,int age)
  55.                 {
  56.                         this.name=name;
  57.                         this.age=age;
  58.                 }
  59.                 public boolean equals(Object obj)//复写Object类的equals方法
  60. 为                {
  61.                         
  62.                         
  63.                         if(!(obj instanceof Person))//判断obj是否为Person类的实例
  64.                                 return false;
  65.                         Person p=(Person)obj;//由于obj为Person的实例,但它被Object提升所以
  66.                                                                     //   如果需要使用子类特有的方法 需要进行向下转型
  67.                         System.out.println(this.name+"......"+p.name);
  68.                         return this.name.equals(p.name)&&this.age==p.age;//使用Person的特有方法  进行比较
  69.                 }
  70.                 public String getName()
  71.                 {
  72.                         return name;
  73.                 }
  74.                 public int getAge()
  75.                 {
  76.                         return age;
  77.                 }

  78.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马