Effective Java 【考虑实现Comparable接口】
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接口】的更多相关文章
- java中的Comparable接口
类对象之间比较"大小"往往是很有用的操作,比如让对象数组排序时,就需要依赖比较操作.对于不同的类有不同的语义.如Student类,比较2个学生对象可以比较他们的score分数来评判 ...
- Java中的Comparable接口和Comparator接口
Comparator位于包java.util下,比较器,是在集合外部定义排序.Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序. Comparable代表一个 ...
- JAVA排序(一) Comparable接口
昨天接到一个实习公司的电话面试,来的很突然,没有准备. 由于以前没用过,在被他问及是否用过JAVA的排序工具Comparable与Comparator时,没有回答上来,只能实话实说没有用过. 感觉太丢 ...
- Java中的comparable接口和Comparator接口的区别
一.comparable和Comparator的区别 1.Comparable和Comparator都是用来实现集合中元素的比较.排序的. 2.Comparable是在类内部定义的方法实现的排序,位于 ...
- Java - 谨慎实现Comparable接口
类实现了Comparable接口就表明类的实例本身具有内在的排序关系(natural ordering). 因此,该类可以与很多泛型算法和集合实现进行协作. 而我们之需要实现Comparable接口唯 ...
- Java基础之Comparable接口, Collections类,Iterator接口,泛型(Generic)
一.Comparable接口, Collections类 List的常用算法: sort(List); 排序,如果需要对自定义的类进行排序, 那就必须要让其实现Comparable接口, 实现比较两个 ...
- Effective java笔记3--类和接口2
三.接口优于抽象类 java提供两种机制,可以用来定义一个允许多个实现的类型:接口和抽象类.由于java只允许单继承,所以,抽象类作为类型定义受到了极大的限制. 已有的类可以很容易被更新,以实现新的接 ...
- Effective java笔记3--类和接口1
一.使类和成员的可访问能力最小化 要想区别一个设计良好的模块与一个设计不好的模块,最重要的因素是,这个模块对于外部的其他模块而言,是否隐藏了内部的数据和其他的实现细节.一个设计良好的模块会隐藏所有的实 ...
- Effective java -- 3 类和接口
第十三条:使类和成员的可访问性最小化 一个设计良好的模块会将实现细节隐藏起来,只将暴露API.模块之间调用并不知道对象的细节.这个概念成为信息隐藏或封装.要注意一点,设计的一个方法或者其他什么,只要不 ...
- java中实现Comparable接口实现自定义排序
class Student implements Comparable{ String name; int gpa; @Override public int compareTo(Object arg ...
随机推荐
- zabbix添加自定义监控项目
在zabbix里添加一个自定义监控项目,简单做个笔记,怕忘了 首先需要定义 zabbix_agentd.conf 中的 UnsafeUserParameters 修改为 UnsafeUserPara ...
- python的socke编程
python的sock编程分为TCP编程和UDP编程,两者不同在于,TCP需要首先建立连接才能发送接收数据,而UDP则可以直接发送接收不需要预先建立连接. tcp编程,我总结为4步 TCP的serve ...
- select 选择列表传值问题
<select> <option value ="volvo">Volvo</option> <option value ="s ...
- tensorflow 查看模型输入输出saved_model_cli show --dir ./xxxx --all
saved_model_cli show --dir ./xxxxxxxx --all 可以查看模型的输入输出,比如使用tensorflow export_model_inference.py 输出的 ...
- SocketIO Server
package com.fd.socketio; import org.json.JSONObject; import com.corundumstudio.socketio.AckRequest; ...
- [邀月博客] SQL Server 2008中SQL增强之二:Top新用途
top数为变量时 declare @intTop intset @intTop=2print @intTop --set rowcount @intTop--select * from [dbo].[ ...
- Flipping an Image
Given a binary matrix A, we want to flip the image horizontally, then invert it, and return the resu ...
- MySQL如何解决1209错误
1209 - The MySQL server is running with the--read-only option so it cannot execute this sta ...
- python异常捕捉以及处理
看标题觉得高大上,好像能处理所有的异常.但是,事实是只能按照字面的意思来理解这一段话. 众所周知写代码哪有不出bug的? 那么出现了bug 我们不想让程序因为bug的存在而退出.那么要怎么做呢? 今天 ...
- Json常用代码
以下使用的都是fastJson. 先创建Person类,如下: public class Person { @JSONField(name = "AGE") private int ...