去除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; } }