集合排序


对Int型进行排序

List<Integer> list= new arrayList<>();
list.add(3);
list.add(1);
list.add(56);
list.add(21);
Collections.sort(list);
System.out.println(lsit.toString());//1 3 21 56默认升序

对String类型进行排序

List<String> list = new ArrayList<>();
list.add("orange");
list.add("ob");
list.add("green");
list.add("yellow");
//进行排序
Collections.sort(list);//它是根据每个字符的asi码进行排序
System.out.println(list.toString());

自定义的类如何排序

comparetor接口

  1. 编写自定义类
  2. 编写实现Comparator接口的实现类,并重写compara方法
  3. 在测试类中使用Collections(排序的集合,排序规则);
int compare(T o1,T o2)比较用来排序的两个参数
- o1<o2	返回负整数
- o1==o2 返回0
- o1>o2 返回正整数
package 集合排序;

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

public class CatSort {
    public static void main(String[] args) {
        Cat cat1=new Cat("jom",25,"中华田园猫");
        Cat cat2=new Cat("jerry",22,"加菲猫");
        ArrayList<Cat> list = new ArrayList<>();
        list.add(cat1);
        list.add(cat2);
        Collections.sort(list,new AgeComparator());//传入排序的类和排序的规则
        System.out.println(list);
    }

}
//按名字排序
class NameComparator implements Comparator<Cat>{

    @Override
    public int compare(Cat o1, Cat o2) {
        //按照名字升序排序
        return o1.getName().compareTo(o2.getName());//这里的compareTo是比较字符串的大小的,返回情况和compare一样
    }
}
//按年龄排序
class AgeComparator implements Comparator<Cat>{
    @Override
    public int compare(Cat o1, Cat o2) {
        int age1=o1.getMonth();
        int age2=o2.getMonth();
        return age1-age2;
    }
}

class Cat{
    private String name;
    private int month;
    private String species;

    public Cat(String name, int month, String species) {
        this.name = name;
        this.month = month;
        this.species = species;
    }

//省略了get和set方法

    @Override
    public String toString() {
        return "Cat[" + name + "," + month + "," + species + "]";
    }
}

comparable接口

特点

  • 对每个类的对象整体进行排序,成为自然排序

  • 类的comparaTo方法成为自然比较方法

  • 如果排序的是集合,调用Collections.sort()方法排序

  • 如果排序的是数字,调用Arrays.sort()方法排序

步骤

  1. 编写自定义类,实现Comparable接口

  2. 实现comparaTo()方法

  3. 编写测试类,使用Collections.sort(排序集合)进行排序

public int compareTo(Goods o) {//将当前对象(调用它的对象)和传入的对象进行比较
        return (int) (this.price-o.getPrice());
 }
package 集合排序;

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

public class GoodsSort {
    public static void main(String[] args) {
        ArrayList<Goods> list = new ArrayList<>();
        list.add(new Goods("s001","电冰箱",3200));
        Collections.sort(list);
        System.out.println(list);

    }
}

class Goods implements Comparable<Goods>{
    private String id;
    private String name;
    private double price;

    public Goods(String id, String name, double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

  //省略了get和set方法
    
    @Override
    public String toString() {
        return "Goods{" +
                "商品编号=" + id +
                ", 商品名称='" + name + '\'' +
                ", 商品价格=" + price +
                '}';
    }

    @Override
    public int compareTo(Goods o) {
        //根据商品的价格进行排序
        return (int) (this.price-o.getPrice());
    }
}

compartor接口和comparable接口区别

补充:

  • comparator接口是在比较的类外部实现接口,耦合低,可以创建多个类实现不同的比较方式
  • comparable接口是在实体类上实现接口,耦合高,也只能实现一种排序方式

版权声明:本文为gxh299988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gxh299988/p/14402304.html