Comparator排序

Comparator排序

作者:邹爱红,撰写时间:2019年04月18日

  1. 定义一个类.,封装一些方法
    class ComparatorDemo{
    private int age;
    private String name;
    public ComparatorDemo() {
    }

public ComparatorDemo (String name, int age) {
this.name = name;
this.age = age;
}

public int getAge() {
return age;
}

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

public String
getName() {
return name;
}

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

然后去主方法里面用集合ArrayList实例化列表,然后添加数据
List 变量=new ArrayList< ComparatorDemo >();
因为直接打印可能会返回对象,因为定义的数据多,所以用add添加数据,
bianliang.add(new ComparatorDemo (“二”, 25));
bianliang.add(new ComparatorDemo (“三”, 25));
bianliang.add(new ComparatorDemo (“四”, 12));
bianliang.add(new ComparatorDemo (“九”, 33));
bianliang.add(new ComparatorDemo (“七”, 33));
bianliang.add(new ComparatorDemo (“五”, 33));

  1. 调用sort排序comparator排序比comparable(collections.sort())的方法多了个参数实例化接口,new
    comparator< ComparableDemo >对那个方法要进行排序的对象,然后去实现接口里面的方法compareto, 里面排序的规则是从小到大:o1-o2 从大到小:o2-o1,O1对应Comparatable里面的This, o2对应comparatable里面的O

Collections.sort(bianliang, new Comparator<
ComparatorDemo > () {
@Override
public int compare(PersonComparator o1,PersonComparator o2) {
if (o1.getAge() != o2.getAge()) {
return o1.getAge() ‐ o2.getAge();
} else {
return o2.getName().compareTo(o1.getName());
}
}
});

然后用迭代器遍历输出列表数据

Iterator<
ComparatorDemo > iterator = bianliang.iterator();

while (iterator.hasNext()) {

ComparatorDemo conpar = iterator.next();

System.out.println(conpar.getName()+"\t"+
conpar.getAge());

}

Comparable和Comparator的关系:
Comparable(这个类是自己定义的,是要一些原生的类的话,定义到内部:class
ComparableDemo implements Comparable {):是写在你要排序的那个类的内部,那个类要实现这个comparable的接口,需要修改那个类原来的类代码,如果没法修改。就使用Comparator 。

Treemap和treeset一致,里面的 Comparable也是实现那个接口(然后再实现的那个方法里写从小到大的排序),treemap直接排序,不用.sort排序,Treemap是用Map<Integer(键的类型),string(值的类型)> 变量 = new 集合<>();用Set kSet= map.keySet();排序排的是key的部分

Comparator(是不需要改原方法的,只需要在外部写:Collections.sort(persons,new Comparator() {
(接下来都是实现接口里面的方法)):如果修改不了就使用comparator,不用修改原来的类,只需要在调用sort方法的时候再传入你的排序规则就行了

TreeMap Comparator排序示例代码传入comparator的实例
Treemap是用Map<Integer(键的类型),string(值的类型)>变量= new集合<>(new Comparator<变量>)把这句代码作为参数转到构造器里面,List那边的Comparator是放在cellections.sort里面的.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8 中的 Comparator 接口提供了很多新的方法,包括 reversed()、thenComparing()、nullsFirst() 和 nullsLast() 等方法,可以更方便地实现自定义排序。 下面是一个使用 Comparator 接口的示例,对一个列表中的 Person 对象进行排序: ```java import java.util.ArrayList; import java.util.Comparator; import java.util.List; public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public static void main(String[] args) { List<Person> persons = new ArrayList<>(); persons.add(new Person("Alice", 25)); persons.add(new Person("Bob", 20)); persons.add(new Person("Charlie", 30)); // 使用 Comparator 接口的默认方法进行排序 Comparator<Person> comparator = Comparator.comparing(Person::getAge); persons.sort(comparator); // 使用 Comparator 接口的 reversed() 方法进行倒序排序 comparator = comparator.reversed(); persons.sort(comparator); // 使用 Comparator 接口的 thenComparing() 方法进行多级排序 comparator = Comparator.comparing(Person::getAge) .thenComparing(Person::getName); persons.sort(comparator); // 使用 Comparator 接口的 nullsFirst() 和 nullsLast() 方法处理 null 值 persons.add(null); comparator = Comparator.nullsFirst(Comparator.comparing(Person::getName)); persons.sort(comparator); } } ``` 在上面的示例中,我们首先定义了一个 Person 类,然后创建了一个包含多个 Person 对象的列表。接下来,我们使用 Comparator 接口的默认方法 `comparing()`,按照年龄对 Person 对象进行排序,然后通过 `reversed()` 方法对排序结果进行倒序处理。接着,我们使用 `thenComparing()` 方法对排序结果进行多级排序,先按照年龄排序,再按照姓名排序。最后,我们使用 `nullsFirst()` 和 `nullsLast()` 方法处理空值,将空值放在排序结果的最前面或最后面。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值