java比较器Comparable和Comparator的使用

向右看齐 2022-08-11 16:46 294阅读 0赞

java的比较器有两类,分别是Comparable接口和Comparator接口。

在为对象数组进行排序时,比较器就有非常大的作用

1、使用comparable接口,需要重写compareTo(T o) 方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,

例子:

  1. package com.yaoxun.test;
  2. public class Student implements Comparable<Student> {
  3. private int score;
  4. private int age;
  5. @Override
  6. public int compareTo(Student o) {
  7. if(this.score > o.score)
  8. return 1;
  9. else if(this.score < o.score)
  10. return -1;
  11. else {
  12. if(this.age > o.age)
  13. return 1;
  14. else if(this.age < o.age)
  15. return -1;
  16. else
  17. return 0;
  18. }
  19. }
  20. }

2、使用Comparator接口,需要重写 compare(T o1, T o2) 方法,

  1. package edu.sjtu.ist.comutil;
  2. import java.util.Comparator;
  3. class Student {
  4. private String name;
  5. private int age;
  6. private float score;
  7. public Student(String name, int age, float score) {
  8. this.name = name;
  9. this.age = age;
  10. this.score = score;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public int getAge() {
  19. return age;
  20. }
  21. public void setAge(int age) {
  22. this.age = age;
  23. }
  24. public float getScore() {
  25. return score;
  26. }
  27. public void setScore(float score) {
  28. this.score = score;
  29. }
  30. public String toString()
  31. {
  32. return name+"\t\t"+age+"\t\t"+score;
  33. }
  34. }
  35. class StudentComparator implements Comparator<Student>{
  36. @Override
  37. public int compare(Student o1, Student o2) {
  38. // TODO Auto-generated method stub
  39. if(o1.getScore()>o2.getScore())
  40. return -1;
  41. else if(o1.getScore()<o2.getScore())
  42. return 1;
  43. else{
  44. if(o1.getAge()>o2.getAge())
  45. return 1;
  46. else if(o1.getAge()<o2.getAge())
  47. return -1;
  48. else
  49. return 0;
  50. }
  51. }
  52. }

发表评论

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

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

相关阅读