欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

判断ArryaList有没有重复对象的方法

程序员文章站 2022-03-21 19:39:25
ArrayList类是List类下一种常用的子类,如果要判断容器里面的对象是否有相等,有两种方法。 下面是自定义的一个Student类,假设容器里重复是按照对象的两个属性都相等。 下面是判断的两种方法,先使用了字符串作为演示。 ......

  ArrayList类是List类下一种常用的子类,如果要判断容器里面的对象是否有相等,有两种方法。

  下面是自定义的一个Student类,假设容器里重复是按照对象的两个属性都相等。

/**
 * @author Wangchengan
 *
 */
public class Student {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    public boolean equals(Object obj) {
        //增加效率,如果是相同对象就不用比较了
        if(this==obj)
        return true;
        //如果要比较的不是跟这个对象一样类型的就抛出一个运行时异常
        if (!(obj instanceof Student)) {
            throw new ClassCastException("类型错误");
        }
        //向下转型才能使用子类的方法
        Student student=(Student)obj;
        return this.name.equals(student.name)&&this.age==student.age;
    }
    
}

  下面是判断的两种方法,先使用了字符串作为演示。

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

public class ArrayListTest {

    public static void main(String[] args) {
        /*
         * ArrayList两种判断重复方法
        1.遍历,使用两个循环
        2.创建一个新的容器,旧容器中使用迭代器,没有则加入新容器
        (其实contains方法里面也是使用了equls方法,只不过字符串的equals被复写了)
        */
        List list=new ArrayList();
        list.add("abc1");
        list.add("abc4");
        list.add("abc2");
        list.add("abc1");
        list.add("abc4");
        list.add("abc4");
        list.add("abc2");
        list.add("abc1");
        list.add("abc4");
        list.add("abc2");
        
        System.out.println(list);
        singleElement2(list);
        System.out.println(list);
        System.out.println("------------");
        /*
         * ArrayList判断对象的方法
         * 其实Arraylist里的contains方法是继承自Collection接口里的contains方法,使用的是equals方法
         * 所以要判断对象里的属性的话,还是要复写对象类里的euals方法,同时它会自动调用
         * 
         */
        List studentList=new ArrayList();
        Student stu1=new Student("lisi", 20);
        Student stu2=new Student("wangwu", 22);
        Student stu3=new Student("liqing", 23);
        Student stu4=new Student("liuhu", 27);
        Student stu5=new Student("lisi", 20);
        Student stu6=new Student("liqing", 23);
        Student stu7=new Student("lisi", 20);
        studentList.add(stu1);
        studentList.add(stu2);
        studentList.add(stu3);
        studentList.add(stu4);
        studentList.add(stu5);
        System.out.println(studentList);
        singleObject(studentList);
        System.out.println(studentList);
        
        

    }
    //判断Arraylist里面有没有重复对象的方法(给对象使用)
    private static void singleObject(List studentList) {
        singleElement2(studentList);
        
    }
    
    //判断Arraylist里面有没有重复对象的方法2
    private static void singleElement2(List list) {
        List newList=new ArrayList();
        for (Iterator iterator = list.iterator(); iterator.hasNext();) {
            Object obj = (Object) iterator.next();
            
            if (!newList.contains(obj)) {
                newList.add(obj);
            }
        }
        list.clear();
        list.addAll(newList);
        
    }
    //判断Arraylist里面有没有重复对象的方法1
    private static void singleElement(List list) {
        for (int i = 0; i < list.size()-1; i++) {
            Object obj_x=list.get(i);
            for (int j = i+1; j< list.size(); j++) {
                if (obj_x.equals(list.get(j))) {
                    list.remove(j);
                    //每次都要减去一个,因为remove后数据元素会改变
                    j--;
                }
                
            }
        }
        
    }

}