Java之comparable接口
comparable 接口:
1. 问题:java.util.Collections 类中的方法 Collections.sort(List list) 是根据什么确定容器中对象的“大小”顺序的?
2. java 中所有可以“排序”的类都实现了 java.lang.comparable 接口,Comparable 接口中只有一个方法:
public int compareTo(Object obj):在该方法中,
返回 0, 表示 this == obj;
返回 正数,表示 this > obj;
返回 负数,表示 this < obj;
3. 实现了 comparable 接口的类通过实现 compareTo 方法从而确定该对象的排序方式.
Demo_1:
class MyName implements Comparable<MyName>{
private int age;
public MyName(int age) {
this.age = age;
}
@Override
public int compareTo(MyName mn) {
if(this.age>mn.age){
return 1;
}else if(this.age<mn.age){
return -1;
}else {
return 0;
}
}
}
public class Test {
public static void main(String[] args) {
MyName m1 = new MyName(12);
MyName m2 = new MyName(25);
System.out.println(m1.compareTo(m2)); // 输出:-1
}
}
Demo_2:
import java.util.*;
class Name implements Comparable<Name>{
private String firstName, lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName(){
return firstName;
}
public String getLastName(){
return lastName;
}
@Override
public String toString() {
return firstName+" "+lastName;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Name){
Name name = (Name)obj;
return (getFirstName().equals(name.firstName)) && (getLastName().equals(name.lastName));
}
return super.equals(obj);
}
@Override
public int hashCode() {
return firstName.hashCode();
}
public int compareTo(Name objj) {
int cmpResult = lastName.compareTo(objj.lastName);
return cmpResult !=0 ? cmpResult:firstName.compareTo(firstName);
}
}
class Test {
public static void main(String[] args) {
LinkedList<Name> ln = new LinkedList<Name>();
ln.add(new Name("song","bo"));
ln.add(new Name("song","qi"));
ln.add(new Name("song","ting"));
ln.add(new Name("liu","bo"));
ln.add(new Name("fang","qi"));
ln.add(new Name("shang","qi"));
ln.add(new Name("zhu","ting"));
System.out.println(ln); // 输出:
Collections.sort(ln);
System.out.println(ln); // 输出:
}
}
// 第1次输出: [song bo, song qi, song ting, liu bo, fang qi, shang qi, zhu ting]
// 第2次输出: [song bo, liu bo, song qi, fang qi, shang qi, song ting, zhu ting]
Java之comparable接口的更多相关文章
- java比较器Comparable接口和Comaprator接口
Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...
- java.lang.Comparable接口
转自:http://blog.csdn.net/zccst/article/details/5092920 java.lang.Comparable 接口 作者: zccst java.lang.Co ...
- java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法
原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...
- Java的Comparable接口的一个陷阱
转载自:http://my.oschina.net/jack230230/blog/56339 Java的Comparable接口提供一个对实现了这个接口的对象列表进行排序的办法.原始的排序对于简单的 ...
- Java之Comparable接口和Comparator接口
Comparable & Comparator 都是用来实现集合中元素的比较.排序的: Comparable 是在集合内部定义的方法实现的排序: Comparator 是在集合外部实现的排序: ...
- Java.lang.Comparable接口和Java.util.Comparator接口的区别
Java的Comparator和Comparable当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 1.Com ...
- java lang(Comparable接口) 和java util(Comparator接口)分析比较
//Comparable 接口强行对实现它的每个类的对象进行整体排序. -- 自然排序.类的compareTo称为自然比较方法. public interface Comparable<T> ...
- Java中Comparable接口和Comparator接口的简单用法
对象比较器 1.Comparable接口 此接口强行对实现它的每个类的对象进行整体排序,这种排序成为类的自然排序,类的compareTo方法称为类的自然比较方法. 代码示例 import java.u ...
- 12.Java中Comparable接口,Readable接口和Iterable接口
1.Comparable接口 说明:可比较(可排序的) 例子:按照MyClass的y属性进行生序排序 class MyClass implements Comparable<MyClass> ...
随机推荐
- JQuery制作网页—— 第七章 jQuery中的事件与动画
1. jQuery中的事件: ●和WinForm一样,在网页中的交互也是需要事件来实现的,例如tab切换效果,可以通过鼠标单击事件来实现 ●jQuery事件是对JavaScript事件的封装,常用事件 ...
- 支付宝H5、APP支付服务端的区别(php)
php支付宝H5和APP支付1.准备工作需要前往 蚂蚁金服开放平台申请https://openhome.alipay.com/developmentDocument.htm 2.大致流程1.用户添加商 ...
- SST-超级简单任务调度器结构分析
SST(Super Simple Task) 是一个基于任务优先级.抢占式.事件驱动.RTC.单堆栈的超级简单任务调度器,它基于Rober Ward一篇论文的思想,Miro Samek用C重新编程实现 ...
- Python(1-8天总结)
day1:变量:把程序运行过程中产生的中间值.暂时存储起来.方便后面的程序调用.变量命名规范:常量:所有字母大写注释:数据类型: 1. int 整数 2. str 字符串. 不会用字符串保存大量的数据 ...
- A1041
输入n个数,找出第一个只出现一次的数,输出它. 如果没有,输出none. 思路: 将输入的数值作为HashTable的数组下标即可. #include<cstdio> ], hashTab ...
- linux 下安装 Cisco Packet Tracer 7.11以及一些注意
https://blog.csdn.net/qq_35882901/article/details/77652571 https://linux.cn/article-5576-1.html 开启登录 ...
- 位域 (Bit field)
最近开始看编程之美这本书,里面有一道关于中国象棋将帅位置的简单问题,如下图所示,写一个程序输出将.帅的合法位置. 分析与解法 问题的本身并不复杂,只要把所有A.B 互相排斥的条件列举出来就可以完成本题 ...
- 解决protobuf import路径的问题
网上关于protobuf import的文章不太详细,有些问题说的不全,比如import时的路径是在哪个目录中搜索的,比如: 我有一个这样的目录结构,我怎么在demo2/protoDemo2.prot ...
- Java多线程一些基础知识
最近复习了一些多线程方面的基础知识,做一下总结,多以自己的理解来文字叙述,如果有漏点或者理解错的地方,欢迎各位大佬多多指出: ps:线程分为用户线程和守护线程,当程序中的所有的用户线程都执行完了之后, ...
- RMI入门HelloWorld
java RMI(Remote Method Invocation)是一种基于java远程调用技术,是对RPC的java实现,可以在不同主机上进行通信与方法调用.PRC通信原理如图: 方法调用从客户对 ...