1.什么是Comparable接口

  此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 的每一个 e1 和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0) e1.equals((Object)e2) 具有相同的布尔值时,类 的自然排序才叫做与 equals 一致 。

2.实现什么方法

  1. int compareTo(T o)
  2. 比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
  3. 强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。
    推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”
  1. 参数:
  2. o - 要比较的对象。
  3. 返回:
  1. 负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
  2. 抛出:
  1. ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
  2.  
  3. 3.实例
  1. import java.util.*;
  2.  
  3. public class EmployeeSortTest {
  4. /**
  5. * @param args
  6. */
  7. public static void main(String[] args) {
  8. // TODO Auto-generated method stub
  9. Employee[] staff = new Employee[ 3 ];
  10. staff[ 0 ] = new Employee( "harry Hacker" , 35000 );
  11. staff[ 1 ] = new Employee( "carl cracke" , 75000 );
  12. staff[ 2 ] = new Employee( "tony Tester" , 38000 );
  13. Arrays.sort(staff); //sort方法可以实现对对象数组排序,但是必须实现 Comparable接口
  14. /*Comparable接口原型为:
  15. * public interface Comparable<T>
  16. * {
  17. * int compareTo(T other);//接口的中方法自动属于public方法
  18. * }
  19. */
  20. for (Employee e: staff)
  21. System.out.println( "id=" +e.getId()+ " name=" +e.getName()+
  22. ".salary=" +e.getSalary());
  23. }
  24. }
  25. /*
  26. * 因为要实现对Employee对象的排序,所以在Employee类中要实现Comparable接口,
  27. * 也就是要实现comepareTo()方法
  28. */
  29. class Employee implements Comparable<Employee>
  30. {
  31. public Employee(String n, double s)
  32. {
  33. name = n;
  34. salary = s;
  35. Random ID = new Random();
  36. id = ID.nextInt( 10000000 );
  37. }
  38. public int getId()
  39. {
  40. return id;
  41. }
  42. public String getName()
  43. {
  44. return name;
  45. }
  46. public double getSalary()
  47. {
  48. return salary;
  49. }
  50. public void raiseSalary( double byPercent)
  51. {
  52. double raise = salary *byPercent/ 100 ;
  53. salary+=raise;
  54. }
  55. public int compareTo(Employee other)
  56. {
  57. if (id<other.id) //这里比较的是什么 sort方法实现的就是按照此比较的东西从小到大排列
  58. return - 1 ;
  59. if (id>other.id)
  60. return 1 ;
  61. return 0 ;
  62. }
  63. private int id;
  64. private String name;
  65. private double salary;
  66. }
  1. 4.Comparator的区别
    Comparator位于包java.util下,而Comparable位于包java.lang下,
    Comparable接口将比较代码嵌入自身类中,而后者在一个独立的类中实现比较。
    如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,
    可以通过  Comparator来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
  2.  
  3. 我们看一个Comparator的例子:
  1. import java.util.TreeSet;
  2. import java.util.Comparator;
  3. class NumComparator implements Comparator<NameTag> {
  4. public int compare (NameTag left,NameTag right) {
  5. return(left.getNumber() - right.getNumber());
  6. }
  7. }
  8. public class CollectionNine {
  9. public static void main(String arg[]) {
  10. new CollectionNine();
  11. }
  12. CollectionNine() {
  13. NumComparator comparator = new NumComparator();
  14. TreeSet<NameTag> set = new TreeSet<NameTag>(comparator);
  15. set.add(new NameTag("Agamemnon",300));
  16. set.add(new NameTag("Cato",400));
  17. set.add(new NameTag("Plato",100));
  18. set.add(new NameTag("Zeno",200));
  19. set.add(new NameTag("Archimedes",500));
  20. for(NameTag tag : set)
  21. System.out.println(tag);
  22. }
  23. }
  1.  
  1.  
  1.  

Comparable接口的实现和使用的更多相关文章

  1. 12.Java中Comparable接口,Readable接口和Iterable接口

    1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...

  2. java中的Comparable接口

    类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...

  3. comparator接口与Comparable接口的区别

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...

  4. Comparable接口与Comparator接口的区别

    1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Pe ...

  5. Comparable接口

    java.util.Arrays类也可以对Object数组进行排序,但是要使用这种方法排序必须实现Comparable接口,此接口就是用于指定对象排序规则的. 设计一个学生类,成绩由高到低排序,成绩相 ...

  6. Java集合中Comparator和Comparable接口的使用

    在Java集合中,如果要比较引用类型泛型的List,我们使用Comparator和Comparable两个接口. Comparable接口 -- 默认比较规则,可比较的 实现该接口表示:这个类的实例可 ...

  7. Java中的Comparable接口和Comparator接口

    Comparator位于包java.util下,比较器,是在集合外部定义排序.Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序. Comparable代表一个 ...

  8. C#实现Comparable接口实现排序

    C#中,实现排序的方法有两种,即实现Comparable或Comparer接口,下面简单介绍实现Comparable接口实现排序功能. 实现Comparable接口需要实现CompareTo(obje ...

  9. Java之Comparable接口和Comparator接口

    Comparable & Comparator 都是用来实现集合中元素的比较.排序的: Comparable 是在集合内部定义的方法实现的排序: Comparator 是在集合外部实现的排序: ...

  10. 第12条:考虑实现Comparable接口

    CompareTo方法没有在Object中声明,它是Comparable接口中的唯一的方法,不但允许进行简单的等同性比较,而且允许执行顺序比较.类实现了Comparable接口,就表明它的实例具有内在 ...

随机推荐

  1. C#学习--SQL server数据库基本操作(连接、增、删、改、查)封装

    写在前面: 在日常的工作中,通常一个项目会大量用的数据库的各种基本操作,因此小编几个常见的数据库的操作封装成了一个dll方便后续的开发使用.SQLserver数据库是最为常见的一种数据库,本文则主要是 ...

  2. shark恒破解笔记1-壳内寻找注册码

    记录学习shark恒大教程的学习记录 壳内寻找注册码 OD打开 明显有壳 F9先运行程序 2.Ctrl+G输入401000到解码段,如果出现db ** 说明已经解码过,脱离了程序本身的壳 鼠标右键-& ...

  3. redis内存数据的持久化方式

    转: http://blog.csdn.net/wzqzhq/article/details/64920996 概述 Redis的强大性能很大程度上都是因为所有数据都是存储在内存中的,然而当Redis ...

  4. vue实现跑马灯效果

    vue实现跑马灯效果为阿中哥哥应援 1.效果图 2.实现代码 <!DOCTYPE html> <html lang="en"> <head> & ...

  5. 【python数据分析实战】电影票房数据分析(一)数据采集

    目录 1.获取url 2.开始采集 3.存入mysql 本文是爬虫及可视化的练习项目,目标是爬取猫眼票房的全部数据并做可视化分析. 1.获取url 我们先打开猫眼票房http://piaofang.m ...

  6. [洛谷P2396]yyy loves Maths VII $\&$ [CF327E]Axis Walking

    这道题是一个状压动归题.子集生成,每一位表示是否选择了第$i$个数. 转移:$f[S] = \sum f[S-\{x\}]$且$x\in S$,当该子集所有元素的和为$b_1$或$b_2$时不转移. ...

  7. javascript学习 first-day

    1.javascript是一种客户端语言,设计它的目的是在用户的机器上而不是服务器上执行任务. 1.1 javascript不允许写服务器机器上的语言:   1.2 Javascript不能关闭不是由 ...

  8. Ubuntu 16.04下配置 Nginx 与 Node.js 以及服务的部署

    第一步:安装nginx sudo apt-get update sudo apt-get install nginx 如果遇到依赖问题,尝试执行sudo apt-get -f install命令 第二 ...

  9. 百万年薪python之路 -- 基本数据类型

    整数 -- 数字(int) 用于比较和运算 32位 2 ** 31 ~ 2 ** 31-1 64位 -2 ** 63 ~ 2 ** 63- 1 ​ + - * / // ** % python2 整型 ...

  10. MongoDB系列---入门安装操作

    MongoDB 学习大纲: 1.MongoDB简介与其它数据库对比以及数据类型 2.MongoDB安装 3.MongoDB简单操作 环境要求: Linux 一.MongoDB简介 1 什么是Mongo ...