1       比较排序Comparable和Comparator

1.1      接口作用说明

Comparable和Comparator都是用来实现对象的比较、排序,对比时需要实现Comparable或Comparator接口,Comparator位于java.util包下,而Comparable位于java.lang包下。

实现类需要实现Comparable接口,在类的内部实现compareTo方法。如 String、Integer已经实现了Comparable接口,自己就可以完成比较大小操作;而Comparator接口,需要定义一个对比类,实现Comparator接口。然后将需要的比较的两个实现类对象传入比较器的compare函数进行比较。前者自己继承接口,内部实现比较;后者外部实现接口,作为一个比较器,将实现类传入对比类方法中。如果比较的方法在很多类中需要用到,就自己写个比较类实现Comparator接口,这样当要比较的时候,把实现了Comparator接口的比较类传过去,省得重复造轮子。

1.2      接口的定义

(1)Comparable的定义

package java.lang;

import java.util.*;

public interface Comparable<T> {

public int compareTo(T o);

}

(2)Comparator的定义如下

package java.util;

public interface Comparator<T> {

int compare(T o1, T o2);

boolean equals(Object obj);

}

实现Comparable接口要重写compareTo方法,实现Comparator需要重写 compare 方法。

1.3      比较

1.3.1   实现Comparable接口,实现compareTo方法

class Student implements Comparable{

public String name;

public int age;

public Student(String name, int age){

this.name = name;

this.age = age;

}

@Override

public int compareTo(Object o) {

Student student = (Student)o;

return this.age- student.age          }

1.3.2   实现Comparator接口,实现compare方法

定义比较器类

class NameSorter implements Comparator{

@Override

public int compare(Object o1, Object o2) {

Student s1 =(Student) o1;

Student s2 =(Student) o2;

return s1.name.compareTo(s2.name);

}

class Student implements Comparator{

public String name;

public int age;

public Student(String name, int age){

this.name = name;

this.age = age;

}

@Override ///按名称排序

public int compare(Object o1, Object o2) {

Student s1 =(Student) o1;

Student s2 =(Student) o2;

return s1.name.compareTo(s2.name);

1.3.3   比较使用实例

(1)Comparable比较

使用实例:

Student stuA=new Student(“A”,10);

Student stuB=new Student(“B”,11);

If(stuB. compareTo(stuA)>0){}

(2)Comparator比较

NameSorter NameCompare =new NameSorter;

NameCompare.compare(stuA,stuB);

1.4      排序

(1)Comparable 排序

ArrayList<Student> students = new ArrayList<>();

Students.add(stuA);

Students.add(stuB);

Collections.sort(students);//按照年龄排序, students 列表中的对象已经实现了Comparable接口,会根据CompareTo方法进行排序。Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。

(2)Comparator排序

students.sort(new NameSorter());//传入比较器,按照名称排序

或者调用Collections的静态方法,传入比较器。

Collections.sort(students, new NameSorter());

java比较排序Comparable和Comparator的更多相关文章

  1. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  2. Java基础之Comparable与Comparator

    Java基础之Comparable与Comparator 一.前言: Java中实现对对象的排序一般情况下主要有以下两种实现方式(万物皆对象嘛): 对象所在的类实现Comparable 接口 定义比较 ...

  3. Java学习之Comparable与Comparator的区别

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

  4. java 中的 Comparable 和 Comparator 与 Iterable 和 Iterator

    Comparable 和 Comparator Comparable 和 Comparator 是两个关系不大的类,其分别侧重于不同的方面. 其中,接口 Comparable<T> 强行对 ...

  5. 【软件构造】(转)Java中的comparable和comparator

    为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Co ...

  6. Java集合(一)--Comparable和Comparator

    Comparable: 是集合内部的方法实现的排序,只有一个方法 public interface Comparable<T> { public int compareTo(T o); } ...

  7. 集合排序Comparable和Comparator有什么区别?

    Comparable和Comparator兄弟俩长得是真像.但是,需要注意下,使用中它们还是有不少区别的.下面,就一探究竟吧. 一.Comparator 做过集合排序的童鞋应该知道,可以使用Colle ...

  8. 来吧,一文彻底搞懂Java中的Comparable和Comparator

    大家好,我是沉默王二,今天在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...

  9. Java的比较器Comparable与Comparator

    在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...

随机推荐

  1. CSAPP:第二章学习笔记:斗之气2段

    一.字长:虚拟地址通过一个字来编码,字长为32位,则可以标识2^32个地址空间,每个空间为一个字节,故为4G 二.字节序:当解释多个字节类型时,存在大小端字节序问题 0x1234567,在大小端表示法 ...

  2. Leetcode Articles: Insert into a Cyclic Sorted List

    Given a node from a cyclic linked list which has been sorted, write a function to insert a value int ...

  3. centos6 更新gcc glibc2.17

    curl -Lks http://www.hop5.in/yum/el6/hop5.repo > /etc/yum.repos.d/hop5.repo yum install gcc wget ...

  4. Linux Centos 删除除某(多)个文件之外的所有文件

    好久没有写东西了.通常我们通过rm -rf  *可以直接强制删除当前文件夹里面的所有内容,但是有些时候我们需要保留一些文件,就比如,网站转移更新需要保留程序压缩包等就需要用到在linux centos ...

  5. meterpreter 持久后门

    创建持久后门 当成功获取目标系统的访问权限后,需要寻找方法来恢复与目标主机的连接,而无需再进入目标系统.如果目标用户破坏了该连接,例如重新启动计算机,此时使用后门将允许自动重新与目标系统建立连接.为了 ...

  6. 聊聊call、apply、bind的故事

    说到call.apply.bind,前端的胖友可是不陌生.以下就从几个方面分别聊聊它们. 是什么?(what?) 实际上它们真正的样子是这样的: Function.prototype.call(thi ...

  7. lua tonumber

    [1]应用tonumber函数 local function test(telnum) , )) == ) -- 5000~5999公司预留号码 , ) == ' or isLen or isRese ...

  8. urlconnection代码

    package com.yucheng.connection; import java.io.BufferedReader; import java.io.InputStream; import ja ...

  9. Linux基础命令---sar显示系统活动信息

    sar sar指令用来收集.报告.保存系统的活动信息.sar命令将操作系统中选定的累积活动计数器的内容写入标准输出.会计系统根据参数“interval”.“count”中的值,写入以秒为单位的指定间隔 ...

  10. 软件测试实验四----mujava变异测试

    1.整个路径结构 2.具体内容 2.1mujava的安装 2.1.1更改CLASSPATH环境变量,使命令行可以找到mujava的路径,方便之后mujava的使用. 2.1.2在系统某一路径下按照格式 ...