集合排序问题

Treeset

ThreeSet用来对元素进行排序,同时也可以保证元素的唯一性

数字从大到小排序,字符串按照字母顺序,汉字是按照unicode码表进行排序的

import java.util.TreeSet;

class Main{
    public static void main(String[] args) {
        TreeSet<Integer> integers = new TreeSet<>();
        integers.add(1);
        integers.add(3);
        integers.add(2);
        integers.add(2);
        System.out.println(integers);//[1,2,3]
    }
}

对象自定义排序

需要实现Comparable接口,实现User方法

在添加元素的生活,会调用compareTo方法,如果该方法返回位0,认为添加的元素和集合当中的元素相等

如果返回值是负数,则比跟元素小,就会放到二叉树左边

如果返回的是一个正数就会放到右边

import java.util.*;

class User implements Comparable<User>{//实现Comparable接口泛型中定义本类

    private int score;

    private int age;

    public User(int score, int age){
        super();
        this.score = score;
        this.age = age;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int getAge() {
        return age;
    }

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


    @Override
    public int compareTo(User o) {
        int i=this.getAge()-o.getAge();//用this减去传入的对象
        if (i==0){
            i=this.getScore()-o.getScore();
        }
        return i;
    }

    @Override
    public String toString() {
        return "User{" +
                "score=" + score +
                ", age=" + age +
                '}';
    }
}

在返回值为0的时候,就说明数据重复了,因此没有添加进去

Main

class Main{
    public static void main(String[] args) {
        Set<User> users = new TreeSet<>();
        users.add(new User(80,20));
        users.add(new User(80,20));
        users.add(new User(81,60));
        users.add(new User(83,25));
       // [User{score=80, age=20}, User{score=83, age=25}, User{score=81, age=60}]
        System.out.println(users);
    }
}

List排序

class Main{
    public static void main(String[] args) {
        List<User> users = new LinkedList<>();//只要是继承了list接口的都可以
        users.add(new User(80,20));
        users.add(new User(80,20));
        users.add(new User(81,60));
        users.add(new User(83,25));
        //[User{score=80, age=20}, User{score=83, age=20}, User{score=83, age=25}, User{score=81, age=60}]
        Collections.sort(users);
        System.out.println(users);
    }
}

调用Collections.sort方法,传入list集合就可以进行升序排序了

可以使用调用sort传入定义了Comparator接口的类,进行自定义升序降序

import java.util.ArrayList;
import java.util.Comparator;

public class Main{
    public static void main(String[] args) {
        ArrayList<Integer> objects = new ArrayList<>();
        objects.add(1);
        objects.add(3);
        objects.add(2);
        objects.add(4);
        Comparator<Integer>comparator=new Comparator<Integer>() {
            @Override
            //第一个为本类中原来的数,第二个为比较的
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        } ;
        objects.sort(comparator);
        objects.sort((o1,o2)->o2-o1);//lambda表达式 与上面的作用相同看起来更简便
        System.out.println(objects);//[4, 3, 2, 1]
    }

}

数组排序

class Main{
    public static void main(String[] args) {
        int a[]={3,4,5,1,2,3};
        Arrays.sort(a);
        for (int b:a){
            System.out.print(b);//123345
        }
    }
}

Map

排序默认是升序排列的

class Main{
    public static void main(String[] args) {
        Map<User,Integer>map=new TreeMap<>();
        map.put(new User(99,18),1);
        map.put(new User(23,40),2);
        map.put(new User(11,70),44);
        map.put(new User(33,40),3);
        //{User{score=99, age=18}=1, User{score=23, age=40}=2, User{score=33, age=40}=3, User{score=11, age=70}=44}
        System.out.println(map);
    }
}
Last modification:April 21, 2022
如果觉得我的文章对你有用,请随意赞赏