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接口的更多相关文章

  1. java比较器Comparable接口和Comaprator接口

    Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...

  2. java.lang.Comparable接口

    转自:http://blog.csdn.net/zccst/article/details/5092920 java.lang.Comparable 接口 作者: zccst java.lang.Co ...

  3. java实现Comparable接口和Comparator接口,并重写compareTo方法和compare方法

    原文地址https://segmentfault.com/a/1190000005738975 实体类:java.lang.Comparable(接口) + comareTo(重写方法),业务排序类 ...

  4. Java的Comparable接口的一个陷阱

    转载自:http://my.oschina.net/jack230230/blog/56339 Java的Comparable接口提供一个对实现了这个接口的对象列表进行排序的办法.原始的排序对于简单的 ...

  5. Java之Comparable接口和Comparator接口

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

  6. Java.lang.Comparable接口和Java.util.Comparator接口的区别

    Java的Comparator和Comparable当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序. 1.Com ...

  7. java lang(Comparable接口) 和java util(Comparator接口)分析比较

    //Comparable 接口强行对实现它的每个类的对象进行整体排序. -- 自然排序.类的compareTo称为自然比较方法. public interface Comparable<T> ...

  8. Java中Comparable接口和Comparator接口的简单用法

    对象比较器 1.Comparable接口 此接口强行对实现它的每个类的对象进行整体排序,这种排序成为类的自然排序,类的compareTo方法称为类的自然比较方法. 代码示例 import java.u ...

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

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

随机推荐

  1. centos总结linux下svn安装与使用

    一.安装篇 centos下yum安装 yum install subversion 查看安装是否成功: svnserve --version 查看安装内容与位置 rpm -ql subversion ...

  2. Mongodb从库配置

    1. 先以master方式启动mongodb 2. 导入主库的数据文件:/data/mongodb-3.0.12/bin/mongorestore /data/tmp/mongodbbak/ 3. 关 ...

  3. 微信小程序 唯一标识 加减

    var nums = 'goods_list[' + e.currentTarget.dataset.indexs+'].goods_num' //console.log(nuns) var num ...

  4. php 计算两个文件的相对路径

    <?php /** * 计算两个文件的相对路径 */ function relative_path($path1, $path2) { $arr1 = explode('/', dirname( ...

  5. 对象转换成JSON字符串

    定义一个Student类: 1 class Student { 2 public $name; 3 public $age; 4 function __construct($name, $age) { ...

  6. 浅谈ETL架构中ODS的作用以及如何在HaoheDI中自动创建ODS表

    什么是ODS表? 在ETL架构中,源数据很少会直接抽取加载到数据仓库EDW,二者之间往往会设置一个源数据的临时存储区域,存储数据在清洗转换前的原始形态,通常被大家称做操作型数据存储,简称ODS,在Ki ...

  7. 分布式时间同步ntp安装

    直接执行:sudo yum install ntp或者sudo -y install ntp

  8. English_phonetic symbol

    Introduction 本人学习了奶爸课程---45天的搞定发音课,结合自己的英语水平,为自己撰写的一个系统的英语发音课,不只是音标,还有音标辨析.连读.音调等. 重点:英语发音时一个持续一生的东西 ...

  9. Python学习:8.小项目之登录注册验证

    简介 本次项目登录注册验证是对之前学习知识点的加深学习,这次项目的练习的知识点有函数.判断语句.循环语句.文件操作等. 项目流程 运行代码之后,输出登录或者注册选项. 当选择登录之后,输入用户名密码, ...

  10. linux怎么把英文版火狐浏览器改成中文

    一.按alt打开菜单栏,点击help>about firefox查看自己的火狐浏览器版本 比如我的是52.4.0版本 二打开网址 http://ftp.mozilla.org/pub/firef ...