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 ...
随机推荐
- R和Python,对抗or融合?
来源商业新知网,原标题:从对抗到融合,教你充分利用R+Python! 我们应该将关注点放在技能上,而不是工具上. 如果你从事数据科学的工作,可能会立即想到两种编程语言:R和Python. 事实上,R和 ...
- django项目部署
1.布署前需要关闭调试.允许任何机器访问,在setting文件中设置 DEBUG = False ALLOW_HOSTS=['*',] 2.安装uWSGI pip install uwsgi 3.配置 ...
- HTTP 学习心得
一.什么是HTTP? 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的 ...
- Nginx入门基础(一)
Nginx介绍 Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP服务器. 官方测试Nginx能够支撑5万并发链接,并且cpu.内存等资源消耗却非常低,运行 ...
- 常用vi命令
i 在当前光标处插入字符,并进入编辑模式 o 在当前光标插入下一行 x 从当前光标处向后删除一个字符. dd 删除当前光标处所在行 :q! 强制退出不保存 :q 退出(文本有改动则警告) :w 保存 ...
- max_delay/min_delay和input_delay/output_delay
今天在使用DC设置随路时钟的时候发现里两个比较容易混淆的设置:max_delay/min_delay和input_delay/output_delay. 1)max_delay/min_delay设置 ...
- vscode 好用插件
1.查询文件路径../../有提示: Path Intellisense 2.require 时的包提示(最新版的vscode已经集成此功能) : Npm Intellisense 3.自动帮你完成 ...
- mysql权限操作(转)
慢慢看吧mysql中可以给你一个用户授予如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,用法格式为: grant 权限 on 数据库对象 to ...
- mybatis generator 源码学习
mybatis/generator 源码地址mybatis/parent 源码地址1. 分别点击Download ZIP下载到本地. 2. 解压generator-master.zip中的core到g ...
- Winform 时间
using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawi ...