Java 比较器comparable与comparator的使用

àì夳堔傛蜴生んèń 2023-10-05 12:43 78阅读 0赞

工具类与算法类(collections和Arrays)使用比较多,在它们里面就包含了comparable与comparator这两种比较器。

一、比较器的分类

  1、comparable内部比较器:元素自身以来就有规定好的默认比较规则;

20201028162419403.png

  2、comparator外部比较器:根据具体需要而自定义的第三方比较规则;(当有外部比较器时元素的自带内部比较器就会被取代)

2020102816290556.png

返回值:negative, zero,positive

20201028164525251.png

注:依赖于根据比较规则两个元素位置的差。

二、使用内部比较器与外部比较器(排序,只能操作List)

内部比较器:必须实体类实现这个接口Comparable

  1. public class Student implements Comparable{
  2. private int number = 0; //学号
  3. private String name = ""; //姓名
  4. private String gender = ""; //性别
  5. public Student() {
  6. }
  7. public Student(int number, String name, String gender) {
  8. this.number = number;
  9. this.name = name;
  10. this.gender = gender;
  11. }
  12. public int getNumber() {
  13. return number;
  14. }
  15. public void setNumber(int number) {
  16. this.number = number;
  17. }
  18. public String getName() {
  19. return name;
  20. }
  21. public void setName(String name) {
  22. this.name = name;
  23. }
  24. public String getGender() {
  25. return gender;
  26. }
  27. public void setGender(String gender) {
  28. this.gender = gender;
  29. }
  30. @Override
  31. public String toString() {
  32. return "Student{" +
  33. "number=" + number +
  34. ", name='" + name + '\'' +
  35. ", gender='" + gender + '\'' +
  36. '}';
  37. }
  38. @Override
  39. public int compareTo(Object o) {
  40. Student stu=(Student)o;
  41. // return stu.getNumber()-this.getNumber();
  42. return this.getNumber()-stu.getNumber();
  43. }
  44. }

调用直接

20201028164843185.png

外部直接实现这个接口Comparator

  1. private static void getComparator(ArrayList<Student> list) {
  2. // 排序 :说明必须要实现这个接口Comparable
  3. //可以使用参数比较器来实现
  4. Collections.sort(list, new Comparator<Student>() {
  5. @Override
  6. public int compare(Student o1, Student o2) {
  7. //asc
  8. // return o1.getNumber()-o2.getNumber();
  9. //desc
  10. return o2.getNumber()-o1.getNumber();
  11. }
  12. });
  13. }

效果:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2hseDIwMDgwODA4_size_16_color_FFFFFF_t_70

发表评论

表情:
评论列表 (有 0 条评论,78人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java比较-Comparable

    在Java中经常会涉及到对象数组的排序问题,就会涉及到对象之间的比较问题。 Java实现对象排序的方式有两种: 自然排序:Comparable 定制排序:Com