第一个例子

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

第二个例子:

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

对象排序,compareTo的更多相关文章

  1. List对象排序的通用方法

    转自 @author chenchuang import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Me ...

  2. [个人原创]关于java中对象排序的一些探讨(三)

    这篇文章由十八子将原创,转载请注明,并标明博客地址:http://www.cnblogs.com/shibazijiang/ 对对象排序也可以使用Guava中的Ordering类. 构造Orderin ...

  3. Java集合中对象排序

    集合中的对象排序需求还是比較常见的.当然我们能够重写equals方法,循环比較:同一时候Java为我们提供了更易使用的APIs.当须要排序的集合或数组不是单纯的数字型时,通常能够使用Comparato ...

  4. java对对象排序

    一.前言 有时我们需要对类按照类中的某一个属性(或者多个属性)来对类的对象进行排序,有两种方法可以实现,一种方法是类实现Comparable<T>接口,然后调用Collections.so ...

  5. java 通用对象排序

    一个排序类,一个排序util? no.no.no…… 使用反射机制,写了一个通用的对象排序util,欢迎指正. 实体类: package entity; public class BaseTypeEn ...

  6. wpf 导出Excel Wpf Button 样式 wpf简单进度条 List泛型集合对象排序 C#集合

    wpf 导出Excel   1 private void Button_Click_1(object sender, RoutedEventArgs e) 2 { 3 4 ExportDataGrid ...

  7. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  8. Java - 简单的对象排序 - Comparator

    注:对象排序,就是对对象中的某一字段进行比较,以正序或倒序进行排序. 例: 需要排序的对象: public class Person { public int age; public String n ...

  9. list排序成员函数对string对象与char*对象排序的差别

    对list容器中的对象排序,不能使用sort()算法,只能采用其自身的排序函数sort().因为,算法sort()只支持随机存取的容器的排序,如vector等. 对基本数据对象list排序:成员函数s ...

  10. js中的数组对象排序(方法sort()详细介绍)

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...

随机推荐

  1. C# socket通信

    最近在研究socket,今天看到很好的一篇关于socket通信的文章,故收藏了,慢慢琢磨. 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: 1.TCP/IP层次模型 当然这里 ...

  2. Steve Loughran:Why not raid 0,its about time and snowflakes!!!

    与RAID-0阵列的同组管理相比,Hadoop更喜欢一组单独磁盘.在Hadoop集群中,读取速度是最能体现性能的重要指标.在Steve Loughran文章中,尤其强调了这一点,他还指出,由于驱动器速 ...

  3. Configure Visual Studio 2013 for debugging .NET framework

    https://referencesource.microsoft.com/ In order to configure Visual Studio 2013 do the following in ...

  4. mysql基础安全

  5. 漫谈单点登录(SSO)(淘宝天猫)

    1. 摘要 ( 注意:请仔细看下摘要,留心此文是否是您的菜,若浪费宝贵时间,深感歉意!!!) SSO这一概念由来已久,网络上对应不同场景的成熟SSO解决方案比比皆是,从简单到复杂,各式各样应有尽有!开 ...

  6. php + jQuery自动完成插件autocompleter

    autocompleter是一个简单的,容易的,可定制的自动完成功能插件,支持缓存. 1.引用脚本 <script type="text/javascript" src=&q ...

  7. CAS 集群部署session共享配置

    背景 前段时间,项目计划搞独立的登录鉴权中心,由于单独开发一套稳定的登录.鉴权代码,工作量大,最终的方案是对开源鉴权中心CAS(Central Authentication Service)作适配修改 ...

  8. JZ2440开发板学习 1. 刚接触开发板, 安装驱动

    一. jtag和串口驱动 1. 驱动下载 http://pan.baidu.com/s/1pJkAHJH 2. 驱动安装 禁用win10的驱动数字签名 http://www.100ask.org/bb ...

  9. libevent源码分析:eventop

    eventop:定义了event_base使用的后端IO复用的一个统一接口 /** Structure to define the backend of a given event_base. */ ...

  10. 位图切割器&位图裁剪器

    位图切割器: 虽然网上有类似的工具,PhotoShop 也有类似功能,但前者似乎不支持超大位图切割(以 G 计大小),而后者的切割块数量好像有比较小的限定范围,于是自己动手写了这个工具. 至于为什么是 ...