5

集合排序

 3 years ago
source link: http://www.cnblogs.com/gxh299988/p/14402304.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

集合排序

目录

对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接口区别

VRbauqY.png!mobile

补充:

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK