• 对象排序,compareTo


    第一个例子 

    Java代码  收藏代码
    1. /*为了比较,让自己的类实现Comparable接口,按照自己想要的排序方式重写compareTo 
    2.  *Map只是提供了对键的排序,但是当我们需要对值排序时就的提供我们自己的比较器 这里 只是模拟了Map但是实际上并没有使用Map 
    3.  
    4.  */  
    5.   
    6. import java.util.Iterator;  
    7.   
    8. import java.util.Set;  
    9. import java.util.TreeSet;  
    10.   
    11. public class SortByValue {  
    12.   
    13.     public static void main(String[] args) {  
    14.         Set<Pair> set = new TreeSet<Pair>();  
    15.         set.add(new Pair("me", "1000"));  
    16.         set.add(new Pair("and", "4000"));  
    17.         set.add(new Pair("you", "3000"));  
    18.         set.add(new Pair("food", "10000"));  
    19.         set.add(new Pair("hungry", "5000"));  
    20.         set.add(new Pair("later", "6000"));  
    21.         set.add(new Pair("myself", "1000"));  
    22.         for (Iterator<Pair> i = set.iterator(); i.hasNext();)  
    23.             // 我喜欢这个for语句  
    24.             System.out.println(i.next());  
    25.     }  
    26. }  
    27.   
    28. class Pair implements Comparable<Object> {  
    29.     private final String name;  
    30.     private final int number;  
    31.   
    32.     public Pair(String name, int number) {  
    33.         this.name = name;  
    34.         this.number = number;  
    35.     }  
    36.   
    37.     public Pair(String name, String number) throws NumberFormatException {  
    38.         this.name = name;  
    39.         this.number = Integer.parseInt(number);  
    40.     }  
    41.   
    42.     public int compareTo(Object o) {  
    43.         if (o instanceof Pair) {  
    44.             // int cmp = Double.compare(number, ((Pair) o).number);  
    45.             int cmp = number - ((Pair) o).number;  
    46.             if (cmp != 0) {// number是第一要比较的,相当于先比较value。如果相同再比较键  
    47.                 return cmp;  
    48.             }  
    49.             return name.compareTo(((Pair) o).name);  
    50.         }  
    51.         throw new ClassCastException("Cannot compare Pair with "  
    52.                 + o.getClass().getName());  
    53.     }  
    54.   
    55.     public String toString() {  
    56.         return name + ' ' + number;  
    57.     }  
    58. }  
    59. 输出结果:  
    60. me 1000  
    61. myself 1000  
    62. you 3000  
    63. and 4000  
    64. hungry 5000  
    65. later 6000  
    66. food 10000  


    第二个例子: 

    Java代码  收藏代码
    1. import java.util.*;  
    2.   
    3. public class NameSort {  
    4.     public static void main(String[] args) {  
    5.         Name[] nameArray = { new Name("John", "Lennon"),  
    6.                 new Name("Karl", "Marx"), new Name("Groucho", "Marx"),  
    7.                 new Name("Oscar", "Grouch") };  
    8.         Arrays.sort(nameArray);  //根据元素的自然顺序对指定对象数组按升序进行排序。数组中的所有元素都必须实现 Comparable 接口。此外,数组中的所有元                                      //素都必须是可相互比较的(也就是说,对于数组中的任何 e1e2 元素而言,e1.compareTo(e2) 不得抛出 ClassCastException)。
    9.         for (int i = 0; i < nameArray.length; i++) {  
    10.             System.out.println(nameArray[i].toString());  
    11.         }  
    12.     }  
    13. }  
    14.   
    15. class Name implements Comparable<Name> {  
    16.     public String firstName, lastName;  
    17.   
    18.     public Name(String firstName, String lastName) {  
    19.         this.firstName = firstName;  
    20.         this.lastName = lastName;  
    21.     }  
    22.   
    23.     public int compareTo(Name o) { // 实现接口  
    24.         int lastCmp = lastName.compareTo(o.lastName);  
    25.         // 首先比较姓(lastName)如果姓相同(lastCmp==0)再比较名(firstName),否则返回名的比较  
    26.         return (lastCmp == 0 ? firstName.compareTo(o.firstName) : lastCmp);  
    27.     }  
    28.   
    29.     public String toString() { // 便于输出测试  
    30.         return firstName + " " + lastName;  
    31.     }  
    32. }  
    33. 输出结果:  
    34. Oscar Grouch  
    35. John Lennon  
    36. Groucho Marx  
    37. Karl Marx  
    Java代码  收藏代码
      1. //看看这个三目运算符的漂亮应用哦!  
      2.     public int compareTo(Pair o) {  
      3.         int cmp = number - o.number;  
      4.         return (cmp == 0 ? name.compareTo(o.name) : cmp);  
      5.     }  
      6. ----------------------  
      7.     public int compareTo(Name o) { // 实现接口  
      8.         int lastCmp = lastName.compareTo(o.lastName);  
      9.         // 首先比较姓(lastName)如果姓相同(lastCmp==0)再比较名(firstName),否则返回名的比较  
      10.         return (lastCmp == 0 ? firstName.compareTo(o.firstName) : lastCmp);  
        1.     }    


          本文转载至:http://ocaicai.iteye.com/blog/794438
  • 相关阅读:
    IntelliJ IDEA 2018.3 升级功能介绍
    Spring 自动装配及其注解
    在IDEA中实战Git-branch
    IntelliJ IDEA 新版发布:支持CPU火焰图,新增酷炫主题
    java中URL和File的相互转化
    写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度
    输入一行字符,分别统计出其中英文 字母、空格、数字和其它字符的个数
    输入两个正整数m和n,求其最大公约数和最小公倍数。
    一个数如果恰好等于它的因子之和,这个数就称为 "完数 "
    判断101-200之间有多少个素数,并输出所有素数。
  • 原文地址:https://www.cnblogs.com/qjm201000/p/qjm_2.html
Copyright © 2020-2023  润新知