Java中ArrayList的去重复及排序

去重复

思想:首先创建一个新都集合,通过遍历旧的集合,用旧集合的元素判断新集合当中是否有该元素,没有就添加到新集合当中。

字符类型元素去重复

package com.lj.test;

import java.util.ArrayList;

public class ArrayListDemo {
    public static void main(String[] args) {

        ArrayList<String> arrayList = new ArrayList<>();

        arrayList.add("hello");
        arrayList.add("hello");
        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add("world");
        arrayList.add("java");

        ArrayList<String> arrayListnew = new ArrayList<>();
        for(String s:arrayList){
            if(!arrayListnew.contains(s)){
                arrayListnew.add(s);
                //便利旧集合没有就添加到新集合
            }
        }
        System.out.println("arraylistnew:" + arrayListnew);
    }
}

运行结果如下:
arraylistnew:[hello, world, java]

自定义对象去重复

因为要比较自定义对象首先我们肯定要创建一个自定义对象


package com.lj.test;

public class Student {

    private String studnet;
    private int age;

    public Student() {
        super();
    }

    public Student(String studnet, int age) {
        super();
        this.studnet = studnet;
        this.age = age;
    }

    public String getStudnet() {
        return studnet;
    }

    public void setStudnet(String studnet) {
        this.studnet = studnet;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student [studnet=" + studnet + ", age=" + age + "]";
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (age != other.age)
            return false;
        if (studnet == null) {
            if (other.studnet != null)
                return false;
        } else if (!studnet.equals(other.studnet))
            return false;
        return true;
    }


}

简单定义一个学生类,传入名字及年龄即可。需要特别注意的是由于我们要比较学生对象里面的名字及年龄是否相等才能判断该对象是否相等所以这里需要重写学生类的equals()方法,有ecplise自动生成即可

回到main方法中

package com.lj.test;

import java.util.ArrayList;

public class ArrayListDemo2 {
    public static void main(String[] args) {

        ArrayList<Student> arrayList = new ArrayList<>();
        ArrayList<Student> arrayListnew = new ArrayList<>();

        Student s1 = new Student("pirlo",21);
        Student s2 = new Student("pirlo",21);
        Student s3 = new Student("范厨师",22);
        Student s4 = new Student("马师傅",21);
        Student s5 = new Student("非洲德化",24);
        Student s6 = new Student("pirlo",22);

        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);
        arrayList.add(s5);
        arrayList.add(s6);

        for(Student s :arrayList){
            System.out.println(s);
            if(!arrayListnew.contains(s)){
                arrayListnew.add(s);
            }
        }
        System.out.println("---------------------");

        for(Student s:arrayListnew){
            System.out.println(s);
        }
    }
}

首先新建两个集合,然后创建学生类对象,将学生类对象添加到ArrayList中,遍历ArrayList如果没有就将其添加进ArrayListnew中。
对两个集合进行打印得到结果如下:
Student [studnet=pirlo, age=21]
Student [studnet=pirlo, age=21]
Student [studnet=范厨师, age=22]
Student [studnet=马师傅, age=21]
Student [studnet=非洲德化, age=24]
Student [studnet=pirlo, age=22]
ArrayList如上
———————
ArrayListnew如下
Student [studnet=pirlo, age=21]
Student [studnet=范厨师, age=22]
Student [studnet=马师傅, age=21]
Student [studnet=非洲德化, age=24]
Student [studnet=pirlo, age=22]

集合排序

思路:使用Collections.sort()方法进行排序

字符集合排序

package com.lj.test;

import java.util.ArrayList;
import java.util.Collections;

public class ArrayListDemo3 {
    public static void main(String[] args) {

        ArrayList<String> arrayList = new ArrayList<String>();

        arrayList.add("adobe");
        arrayList.add("piack");
        arrayList.add("锤子");
        arrayList.add("手");
        arrayList.add("下面是中文");
        arrayList.add("我是中文");
        arrayList.add("上面是中文加1");
        arrayList.add("敖厂长");
        arrayList.add("王尼玛");
        arrayList.add("back");
        arrayList.add("aeobe");

        Collections.sort(arrayList);
        System.out.println(arrayList);
    }
}

运行结果如下:
[adobe, aeobe, back, piack, 上面是中文加1, 下面是中文, 我是中文, 手, 敖厂长, 王尼玛, 锤子]
观察结果我们可以看到,对英文字符串是按字母自然排序规则进行,中文没有看出来待核实

自定义对象排序

同样我们首先自定义一个学生类


package com.lj.test;

public class Student implements Comparable<Student>{

    private String name;
    private int age;

    public Student() {
        super();
    }

    public Student(String studnet, int age) {
        super();
        this.name = studnet;
        this.age = age;
    }

    public String getStudnet() {
        return name;
    }

    public void setStudnet(String studnet) {
        this.name = studnet;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student [studnet=" + name + ", age=" + age + "]";
    }

    @Override
    public int compareTo(Student o) {
        int num = this.age - o.age;
        int num2 = num == 0 ?this.name.compareTo(o.name):num;
        return num2;
    }   
}

需要注意的是要对自定义类实现排序我们必须在这个类实现一个Comparable接口并复写其compareTo()方法。

再次回到MainActivity中:

package com.lj.test;

import java.util.ArrayList;
import java.util.Collections;

public class ArrayListDemo3 {
    public static void main(String[] args) {

        ArrayList<Student> arrayList = new ArrayList<Student>();

        Student s1 = new Student("pirlo",21);
        Student s3 = new Student("范厨师",23);
        Student s4 = new Student("马师傅",21);
        Student s5 = new Student("非洲德化",24);
        Student s6 = new Student("pirlo",22);

        arrayList.add(s1);
        arrayList.add(s3);
        arrayList.add(s4);
        arrayList.add(s5);
        arrayList.add(s6);

        Collections.sort(arrayList);
        for(Student s : arrayList){
            System.out.println(s);
        }
    }
}

运行结果:
Studnet [name=pirlo, age=21]
Studnet [name=马师傅, age=21]
Studnet [name=pirlo, age=22]
Studnet [name=范厨师, age=23]
Studnet [name=非洲德化, age=24]

已经可以看到我们对学生们按年龄进行了排序。

有了以上两种方法之后我们就可以使用Arraylist进行去重复和排序功能了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值