像Integer、String这些类型的数据都是已经实现Comparable接口的,所以对这些类型可以直接通过Arrays.sort(...)和Collections.sort(...)方法进行排序。但是对于一些自己new出来的对象而言,如果想使用sort这种方法,必须要实现Comparable接口,这是由sort方法底层决定的,具体看一下实例:

定义一个Bean

public class Employee implements Comparable{

private int age;  private String name;

public Employee(String name,int age){

this.name=name;

this.age=age;

}  public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + age;

result = prime * result + ((name == null) ? 0 : name.hashCode());

return result;  }

@Override

public boolean equals(Object obj) {

if (this == obj)    return true;

if (obj == null)    return false;

if (getClass() != obj.getClass())

return false;

Employee other = (Employee) obj;

if (age != other.age)

return false;

if (name == null) {

if (other.name != null)

return false;

} else if (!name.equals(other.name))

return false;

return true;

}

@Override  public String toString() {

return "Employee [age=" + age + ", name=" + name + "]";

}

@Override

public int compareTo(Object o) {

if(o instanceof Employee){

if(age > ((Employee) o).age){

return 1;

}else if(age == ((Employee) o).age){

return 0;   }else if (age < ((Employee) o).age){

return -1;   }

}   return 0;

}

}

//

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

public class EmployeeSortTest {

public static void main(String[] args){

Employee[] staff = new Employee[3];

staff[0]= new Employee("aaa",12);

staff[1] = new Employee("bbb",13);

staff[2] = new Employee("ccc",14);

Arrays.sort(staff);//sort方法可以实现对对象数组的排序,但必须实现Comparable接口

for(Employee e: staff){

System.out.println(e);

}  //以上方法虽然可以实现对象的排序,但是有弊端;

//1、修改了公共类Employee,而很多情况下我们是没有办法修改公共的类,

//2、当我们需求满足不同的方式进行排序时,这种方法是不可行的

//接下来java中提供了Comparator接口,Comparator使用其compare()方法返回的整数来比较2个对象,

//这样就无需修改公共类

System.out.println("---------------");

List<Employee> list = new ArrayList<Employee> ();

list.add(new Employee("aaa",12));

list.add(new Employee("bbb",13));

list.add(new Employee("bbb",14));

Collections.sort(list, new Comparator<Employee>(){

@Override

public int compare(Employee  o1, Employee  o2) {

// TODO Auto-generated method stub

return o1.getAge()-o2.getAge();

}

});

for(Employee e : list){

System.out.println(e);

}

}

}

//输出结果:

Employee [age=12, name=aaa]
Employee [age=13, name=bbb]
Employee [age=14, name=ccc]
Employee [age=12, name=aaa]
Employee [age=13, name=bbb]
Employee [age=14, name=bbb]

转载于:https://www.cnblogs.com/muliu/p/5502330.html

java 中的2个接口 Comparable和Comparator相关推荐

  1. 理解java中的两种接口

    在java 中我们常常提高接口一词.在java 中有两中接口. 第一种接口:就是指系统对外提供的所有服务,在对象中表现为public类型的方法的声明.也就是我们常常在一个类中写的public的方法了. ...

  2. 【Groovy】Groovy 方法调用 ( Java 中函数参数是接口类型 | 函数参数是接口类型 可以 直接传递闭包 )

    文章目录 一.Java 中函数参数是接口类型 二.函数参数是接口类型 可以 直接传递闭包 三.完整代码示例 一.Java 中函数参数是接口类型 在 Android 中经常使用如下形式的接口 : 定义一 ...

  3. 深入理解Java中的抽象类和接口

    对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的时候会以为它们可以随意互换使用, ...

  4. JAVA中的通用文件下载接口

    本文记录下JAVA中的通用文件下载接口,每次都上网找,挺麻烦的. 文章目录 概述 概述 /*** 通用下载请求** @param filePathName 文件路径*/@GetMapping(&quo ...

  5. Java 中的抽象类和接口

    Java 中的抽象类和接口 1.参考资料 深入理解Java的接口和抽象类 Java抽象类与接口的区别 2.前言 有一次旁听面试的时候,听到面试官问了一句:既然 JDK8 中接口有了默认方法实现,那接口 ...

  6. java饲养员喂动物_做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处...

    做一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处 interface Animal{ //动物的接口    public void eat(Food food); // ...

  7. JAVA中的抽象类与接口

    JAVA中的抽象类与接口 接口和抽象类的区别: 接口和抽象类是支持抽象类定义的两种机制. 接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现. 抽象类 ...

  8. JAVA中implements实现多接口

    JAVA中implements实现多接口 这里有一个游戏,人猿泰山. 主角是一个单独的类,这里我们主要用怪物说明接口的用法: 怪物有很多种, 按地域分:有的在天上飞,有的在地上跑,有的在水里游 按攻击 ...

  9. java中如何调用dal接口案例_关于Java:接口的目的

    好吧,我认为接口是一种强制对象实现一定数量功能的方法,而不必使用继承.有点像合同.我半明白他们的意思. 但是,如果界面中的所有内容都是: public interface animal{ void e ...

最新文章

  1. interrupt分析
  2. How mBDOC is generated and saved in DB
  3. android 环形时间显示_使用Arduino构建OLED显示屏与Android手机接口的智能手表
  4. 信息学奥赛C++语言: 趣味整数1(自守数)
  5. python学习之路-1 python简介及安装方法
  6. 小小在线教授何为BTC跳矿(教授如何在线扩大收益)
  7. IDEA部署项目和多余的项目删掉的演示
  8. MyEclipse_8.5+flex_4+Blazeds配置
  9. Ubuntu 14.04 下每次重启系统都默认最大亮度的解决办法
  10. JavaScript的作用域(1)
  11. 使用WIN32汇编语言实现一个基本windows窗口的过程分析
  12. python导入文件夹下所有包_python 通过文件夹导入包的操作
  13. Unity3D简单换装系统
  14. PTA Huffman树及其应用题
  15. spring boot 集成redis监听Key值事件失效
  16. 企业邮箱用户名如何设置修改?企业邮箱域名后缀选择
  17. intellij设置经典样式(背景为黑色的经典样式Darcula)
  18. Multisim仿真 错误Error: Shorted voltage sources found: Vfgen_src_negative
  19. 全选和反选,怎么写,两种方法~
  20. 28.从键盘输入10个正负相间的整数,输出个位数是奇数、十位数是偶数的所有数。

热门文章

  1. 随笔(二)-- PyCharm如何更改背景图片
  2. STM32F4 HAL库开发 -- 温度传感器(DS18B20)
  3. STM32开发 -- 串口详解
  4. The 2018 ACM-ICPC Asia Qingdao Regional Contest, Online
  5. RNN-LSTM循环神经网络-03Tensorflow进阶实现
  6. Android SO逆向2-实例分析
  7. JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)
  8. mysql 主表某一列 小于某一个表的两列之和_关于MySQL索引知识与小妙招
  9. CVPR 2017 CFNet:《End-to-end representation learning for Correlation Filter based tracking》论文笔记
  10. 集合(normal)