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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值