集合排序
集合排序
对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接口
- 编写自定义类
- 编写实现Comparator接口的实现类,并重写compara方法
- 在测试类中使用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()方法排序
步骤
-
编写自定义类,实现Comparable接口
-
实现comparaTo()方法
-
编写测试类,使用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接口是在实体类上实现接口,耦合高,也只能实现一种排序方式