接口

  1. public interface Comparator<T> {
  2. //返回值可能为负数,零或者正数,代表的意思是第一个对象小于、等于或者大于第二个对象。
  3. int compare(T o1, T o2);
  4. boolean equals(Object obj);
  5. }
  6. public interface Comparable<T> {
  7. public int compareTo(T o);
  8. }

使用

  1. public class test {
  2. public static void main(String[] args) {
  3. List<UserInfo> list = new ArrayList<UserInfo>();
  4. list.add(new UserInfo(1,21,"name1"));
  5. list.add(new UserInfo(2,27,"name1"));
  6. list.add(new UserInfo(3,15,"name1"));
  7. list.add(new UserInfo(5,24,"name1"));
  8. list.add(new UserInfo(4,24,"name1"));
  9. //对该类排序
  10. Collections.sort(list);
  11. for(int i=0;i<list.size();i++){
  12. System.out.println(list.get(i));
  13. }
  14. }
  15. }
  16. //需要比较的实体类自身实现Comparable接口
  17. class UserInfo implements Comparable<UserInfo>{
  18. private int userid;
  19. private int age;
  20. private String name;
  21. public UserInfo(int userid, int age, String name) {
  22. this.userid = userid;
  23. this.age = age;
  24. this.name = name;
  25. }
  26. public int getUserid() {
  27. return userid;
  28. }
  29. public void setUserid(int userid) {
  30. this.userid = userid;
  31. }
  32. public int getAge() {
  33. return age;
  34. }
  35. public void setAge(int age) {
  36. this.age = age;
  37. }
  38. public String getName() {
  39. return name;
  40. }
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44. @Override
  45. public String toString(){
  46. return this.userid+","+this.age+","+this.name;
  47. }
  48. @Override
  49. public int compareTo(UserInfo o) {
  50. //如果年龄相同,则比较userid,也可以直接 return this.age-o.age;
  51. if(this.age-o.age==0){
  52. return this.userid-o.userid;
  53. }else{
  54. return this.age-o.age;
  55. }
  56. }
  57. }
  1. public class test1 {
  2. public static void main(String[] args) {
  3. List<UserInfo> list = new ArrayList<UserInfo>();
  4. list.add(new UserInfo(1,21,"name1"));
  5. list.add(new UserInfo(2,27,"name2"));
  6. list.add(new UserInfo(3,15,"name3"));
  7. list.add(new UserInfo(5,24,"name4"));
  8. list.add(new UserInfo(4,24,"name5"));
  9. //new一个比较器
  10. MyComparator comparator = new MyComparator();
  11. //对list排序
  12. Collections.sort(list,comparator);
  13. for(int i=0;i<list.size();i++){
  14. System.out.println(list.get(i));
  15. }
  16. }
  17. }
  18. //MyComparator是一个实现Comparator接口的比较器类,重写compare方法实现比较规则
  19. class MyComparator implements Comparator<UserInfo>{
  20. @Override
  21. public int compare(UserInfo o1,UserInfo o2) {
  22. if(o1.getAge()-o2.getAge()==0){
  23. return o1.getUserid()-o2.getUserid();
  24. }else{
  25. return o1.getAge()-o2.getAge();
  26. }
  27. }
  28. }
  29. class UserInfo{
  30. private int userid;
  31. private int age;
  32. private String name;
  33. public UserInfo(int userid, int age, String name) {
  34. this.userid = userid;
  35. this.age = age;
  36. this.name = name;
  37. }
  38. public int getUserid() {
  39. return userid;
  40. }
  41. public void setUserid(int userid) {
  42. this.userid = userid;
  43. }
  44. public int getAge() {
  45. return age;
  46. }
  47. public void setAge(int age) {
  48. this.age = age;
  49. }
  50. public String getName() {
  51. return name;
  52. }
  53. public void setName(String name) {
  54. this.name = name;
  55. }
  56. @Override
  57. public String toString(){
  58. return this.userid+","+this.age+","+this.name;
  59. }
  60. }