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;
????}
}