java比较排序Comparable和Comparator
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的更多相关文章
- Java基础系列-Comparable和Comparator
原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述 Java中的排序是由Comparable和Comparator这两个接 ...
- Java基础之Comparable与Comparator
Java基础之Comparable与Comparator 一.前言: Java中实现对对象的排序一般情况下主要有以下两种实现方式(万物皆对象嘛): 对象所在的类实现Comparable 接口 定义比较 ...
- Java学习之Comparable与Comparator的区别
Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 ...
- java 中的 Comparable 和 Comparator 与 Iterable 和 Iterator
Comparable 和 Comparator Comparable 和 Comparator 是两个关系不大的类,其分别侧重于不同的方面. 其中,接口 Comparable<T> 强行对 ...
- 【软件构造】(转)Java中的comparable和comparator
为了方便阅读和复习,转载至此,原地址:温布利往事的博客 阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Co ...
- Java集合(一)--Comparable和Comparator
Comparable: 是集合内部的方法实现的排序,只有一个方法 public interface Comparable<T> { public int compareTo(T o); } ...
- 集合排序Comparable和Comparator有什么区别?
Comparable和Comparator兄弟俩长得是真像.但是,需要注意下,使用中它们还是有不少区别的.下面,就一探究竟吧. 一.Comparator 做过集合排序的童鞋应该知道,可以使用Colle ...
- 来吧,一文彻底搞懂Java中的Comparable和Comparator
大家好,我是沉默王二,今天在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:Java 的 Comparable 和 Comparator 是兄弟俩吗?像这类灵魂拷问 ...
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
随机推荐
- .NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?(转)
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理? 后端开发 作者: Rector 1973 阅读 0 评论 0 收藏 收藏本文 ...
- Leetcode: Max Consecutive Ones II(unsolved locked problem)
Given a binary array, find the maximum number of consecutive 1s in this array if you can flip at mos ...
- POJ 1390 Blocks(区间DP)
Blocks [题目链接]Blocks [题目类型]区间DP &题意: 给定n个不同颜色的盒子,连续的相同颜色的k个盒子可以拿走,权值为k*k,求把所有盒子拿完的最大权值 &题解: 这 ...
- PHP filter_var 函数用法
先介绍下PHP Filter PHP手册地址:http://php.net/manual/zh/ref.filter.php PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤. ...
- Debian下安装中文包和输入法
Debian下安装中文包和输入法 #aptitude install locales(没有aptitude的话可以先安装apt-get insall aptitude ) #dpkg-reconfi ...
- win7系统删除打印机后刷新又出现怎么办
方法/步骤:1.进入桌面后,按下“Win + R”组合键打开运行窗口,在运行中输入“spool”并点击确定:2.之后会进入路径为“C:\Windows\System32\spool”的文件夹中,3.在 ...
- 关于element组件中分页的一些个人思路
最近在用element,用到了它的分页这个组件,我这边的情况是,我前端请求数据,数据大概有20个的样子,把数据存在data的一个数组里面,用一个v-for循环遍历数组内容,并用div装起来,这样20个 ...
- [批处理]守护NodeJS进程
背景: 日常进行CI过程中,使用NodeJs方式:GIT更新->检测是否需要编译->调用IncrediBuilder编译->读取编译日志判断是否通过->调用7z打包 问题: 持 ...
- 2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335
一.实验目标: 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,get ...
- 用Python实现一个词频统计(词云+图)
第一步:首先需要安装工具python 第二步:在电脑cmd后台下载安装如下工具: (有一些是安装好python电脑自带有哦) 有一些会出现一种情况就是安装不了词云展示库 有下面解决方法,需看请复制链接 ...