java 比较器 返回值_Java的比较器Comparable与Comparator

在Java中有两个比较器:Comparable、Comparator

对于Integer、Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序的情况,这种情况下我们需要人工定义Java比较器,告诉程序两个对象如何比较大小。

Comparable

Comparable称为内部比较器,因为我们创建需要排序的类还要实现这个类,在创建之初就要人工规定好了排序方式。

实现这个类,然后我们需要重写他的compareTo方法,传递一个类进入,与当前本身类进行比较,返回值是一个int类型。

比较规则是:如果本身 - 传入 > 0,且返回的是正数,那么就是按照升序排列,如果返回的是负数,就是按照降序排列。也可以看成return a-b是升序,return b-a是降序。

如果调用compare方法大于0,就把前一个数和后一个数交换,也就是把大的数放后面了,即所谓的升序了。如果小于等于0,那么就不会交换了。

import java.util.*;

public class Test {

public static void main(String[] args) {

MySort m1 = new MySort();

MySort m2 = new MySort();

m1.setId(10);

m2.setId(8);

LinkedList list = new LinkedList<>();

list.add(m1);

list.add(m2);

System.out.println(list.get(0).getId() + " ");

System.out.println(list.get(1).getId());

Collections.sort(list);

System.out.println(list.get(0).getId() + " ");

System.out.println(list.get(1).getId());

}

}

class MySort implements Comparable {

private String name;

private int id;

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setId(int id) {

this.id = id;

}

public int getId() {

return id;

}

@Override

public int compareTo(MySort o) {

// 按照升序排序,低->高

if (id - o.id > 0) {

return 1;

} else if (id - o.id == 0) {

return 0;

} else {

return -1;

}

}

}

Comparator

Comparator称为外部比较器,因为Comparator可以脱离所需要比较的类,比如要对没有实现Comparable的类进行比较,存在List中,这时候如果要排序的话,可以在Collections.sort() 中传入一个Comparator比较器,重写该比较器的compare方法即可。

import java.util.*;

public class Test {

public static void main(String[] args) {

MySort m1 = new MySort();

MySort m2 = new MySort();

m1.setId(10);

m2.setId(8);

LinkedList list = new LinkedList<>();

list.add(m1);

list.add(m2);

System.out.print(list.get(0).getId() + " ");

System.out.println(list.get(1).getId());

Collections.sort(list, new Comparator() {

@Override

public int compare(MySort o1, MySort o2) {

if (o1.getId() - o2.getId() > 0) {

return 1;

} else if (o1.getId() - o2.getId() == 0) {

return 0;

} else {

return -1;

}

}

});

System.out.print(list.get(0).getId() + " ");

System.out.println(list.get(1).getId());

}

}

class MySort {

private String name;

private int id;

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setId(int id) {

this.id = id;

}

public int getId() {

return id;

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值