去除ArrayList中的重复元素

ArrayList中可以存在重复元素的,若要去除重复元素必须要进行扫描,其实在原理上和数组去除重复元素是一样的。

可以利用contains方法来确定ArrayList中是否存在某个元素。

但是ArrayList中可以放任意的对象,那怎么定义各个对象是否是相同的?

可以通过自己定义类的专属equals方法,定义规则确定某两个对象是否相同,因为contains在判断某个元素是否存在ArrayList中,也是在比较这个元素时候是否和容器中存在的元素相同,若相同则存在,若不相同则不存在,contains运行的基础是在equals的方法之上的!

首先定义Person类

class Person

{

    private String name;

    private int age;

 

    Person(String name, int age)

    {

        this.name = name;

        this.age = age;

    }

    //定义若两个人的名字和年龄相同则两个人相同

    public boolean equals(Object obj) //此方法是虚拟机自动调用的

    {

        if(!(obj instanceof Person)) //此处先判断所判断元素是否属于Person

            return false;

 

        Person p = (Person) obj;

 

        return this.name.equals(p.name) && this.age==p.age; //若返回为真则说明二者相同

    }

 

    public String getName()

    {

        return this.name;

    }

 

    public int getAge()

    {

        return this.age;

    }

}

//这是主函数类

public class Test

{

    public static void main(String[] args)

    {

        //声明一个容器,然后向其中添加4个元素

        ArrayList<Person> al = new ArrayList<>();

        al.add(new Person("zhangsan", 20));

        al.add(new Person("lisi", 22));

        al.add(new Person("zhangsan", 20));

        al.add(new Person("lisi", 20));

 

        ArrayList<Person> al2 = Test.operate(al);

 

        Iterator<Person> it = al2.iterator();

 

        while(it.hasNext())

        {

            Person p = it.next();

            System.out.println(p.getName()+"--"+p.getAge());

        }

    }

    //这个函数来处理用于去除相同元素

    public static ArrayList<Person> operate(ArrayList<Person> al)

    {

        ArrayList<Person> newAl = new ArrayList<>();

 

        Iterator<Person> it = al.iterator();

 

        while(it.hasNext())

        {

            Person p = it.next();

            if(!newAl.contains(p))

                newAl.add(p);

        }

 

        return newAl;

    }

}

 

posted @ 2014-09-15 16:02  风痕影默  阅读(356)  评论(0编辑  收藏  举报
友情链接:极限BT