Effective Java --Comparable接口

compareTo方法是Comparable接口的唯一方法。类实现了Comparable接口,表明它的实例具有内在的排序关系。

自己实现compareTo方法应该注意的点:

自反性: x.compareTo(x) == 0

可传递性: x.compareTo(y)>0 && y.compareTo(z)>0 ==> x.compareTo(z) > 0

可逆性: x.compareTo(y) == -y.compareTo(x)

建议: (x.compareTo(y) == 0) == x.equals(y)

例子:

public class ComparableImpl  implements Comparable<ComparableImpl>{

    public static void main(String[] args) {

        ComparableImpl A = new ComparableImpl("A",9);
ComparableImpl B = new ComparableImpl("B",5);
ComparableImpl C = new ComparableImpl("B",3); //TreeSet 去重 排序
TreeSet set = new TreeSet();
set.add(A);
set.add(B);
set.add(C); while(!set .isEmpty()){
System.out.println(set.pollFirst());
}
} private String name;
private Integer age; public int getAge() {
return age;
}
public String getName() {
return name;
} public ComparableImpl(String name , int age)
{
this.name = name;
this.age = age;
} @Override
public int compareTo(ComparableImpl o) {
return this.name.compareTo(o.getName()) == 0 ? this.age.compareTo(o.getAge()) : this.name.compareTo(o.getName());
} @Override
public String toString() {
return "ComparableImpl{" +"name='" + name + '\'' +", age=" + age +'}';
}
} 运行结果:

ComparableImpl{name='A', age=9}
ComparableImpl{name='B', age=3}
ComparableImpl{name='B', age=5}

Effective Java 【考虑实现Comparable接口】的更多相关文章

  1. java中的Comparable接口

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

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

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

  3. JAVA排序(一) Comparable接口

    昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢 ...

  4. Java中的comparable接口和Comparator接口的区别

    一.comparable和Comparator的区别 1.Comparable和Comparator都是用来实现集合中元素的比较.排序的. 2.Comparable是在类内部定义的方法实现的排序,位于 ...

  5. Java - 谨慎实现Comparable接口

    类实现了Comparable接口就表明类的实例本身具有内在的排序关系(natural ordering). 因此,该类可以与很多泛型算法和集合实现进行协作. 而我们之需要实现Comparable接口唯 ...

  6. Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)

    一.Comparable接口, Collections类 List的常用算法: sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个 ...

  7. Effective java笔记3--类和接口2

    三.接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类.由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制. 已有的类可以很容易被更新,以实现新的接 ...

  8. Effective java笔记3--类和接口1

    一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实 ...

  9. Effective java -- 3 类和接口

    第十三条:使类和成员的可访问性最小化 一个设计良好的模块会将实现细节隐藏起来,只将暴露API.模块之间调用并不知道对象的细节.这个概念成为信息隐藏或封装.要注意一点,设计的一个方法或者其他什么,只要不 ...

  10. java中实现Comparable接口实现自定义排序

    class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg ...

随机推荐

  1. zabbix添加自定义监控项目

    在zabbix里添加一个自定义监控项目,简单做个笔记,怕忘了 首先需要定义 zabbix_agentd.conf  中的 UnsafeUserParameters 修改为 UnsafeUserPara ...

  2. python的socke编程

    python的sock编程分为TCP编程和UDP编程,两者不同在于,TCP需要首先建立连接才能发送接收数据,而UDP则可以直接发送接收不需要预先建立连接. tcp编程,我总结为4步 TCP的serve ...

  3. select 选择列表传值问题

    <select> <option value ="volvo">Volvo</option> <option value ="s ...

  4. tensorflow 查看模型输入输出saved_model_cli show --dir ./xxxx --all

    saved_model_cli show --dir ./xxxxxxxx --all 可以查看模型的输入输出,比如使用tensorflow export_model_inference.py 输出的 ...

  5. SocketIO Server

    package com.fd.socketio; import org.json.JSONObject; import com.corundumstudio.socketio.AckRequest; ...

  6. [邀月博客] SQL Server 2008中SQL增强之二:Top新用途

    top数为变量时 declare @intTop intset @intTop=2print @intTop --set rowcount @intTop--select * from [dbo].[ ...

  7. Flipping an Image

    Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resu ...

  8. MySQL如何解决1209错误

            1209 - The MySQL server is running with the--read-only option so it cannot  execute this sta ...

  9. python异常捕捉以及处理

    看标题觉得高大上,好像能处理所有的异常.但是,事实是只能按照字面的意思来理解这一段话. 众所周知写代码哪有不出bug的? 那么出现了bug 我们不想让程序因为bug的存在而退出.那么要怎么做呢? 今天 ...

  10. Json常用代码

    以下使用的都是fastJson. 先创建Person类,如下: public class Person { @JSONField(name = "AGE") private int ...