在Java中有两个比较器:ComparableComparator

对于Integer、Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序的情况,这种情况下我们需要人工定义Java比较器,告诉程序两个对象如何比较大小。

Comparable

Comparable称为内部比较器,因为我们创建需要排序的类还要实现这个类,在创建之初就要人工规定好了排序方式。

实现这个类,然后我们需要重写他的compareTo方法,传递一个类进入,与当前本身类进行比较,返回值是一个int类型。

比较规则是:如果本身 - 传入 > 0,且返回的是正数,那么就是按照升序排列,如果返回的是负数,就是按照降序排列。也可以看成return a-b是升序,return b-a是降序。

如果调用compare方法大于0,就把前一个数和后一个数交换,也就是把大的数放后面了,即所谓的升序了。如果小于等于0,那么就不会交换了。

import java.util.*;
public class Test {
public static void main(String[] args) { MySort m1 = new MySort();
MySort m2 = new MySort();
m1.setId(10);
m2.setId(8); LinkedList<MySort> list = new LinkedList<>();
list.add(m1);
list.add(m2); System.out.println(list.get(0).getId() + " ");
System.out.println(list.get(1).getId());
Collections.sort(list);
System.out.println(list.get(0).getId() + " ");
System.out.println(list.get(1).getId());
} class MySort implements Comparable<MySort> {
private String name;
private int id; public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setId(int id) {
this.id = id;
} public int getId() {
return id;
} @Override
public int compareTo(MySort o) {
// 按照升序排序,低->高
if (id - o.id > 0) {
return 1;
} else if (id - o.id == 0) {
return 0;
} else {
return -1;
}
}
}

Comparator

Comparator称为外部比较器,因为Comparator可以脱离所需要比较的类,比如要对没有实现Comparable的类进行比较,存在List中,这时候如果要排序的话,可以在Collections.sort() 中传入一个Comparator比较器,重写该比较器的compare方法即可。

import java.util.*;
public class Test {
public static void main(String[] args) {
MySort m1 = new MySort();
MySort m2 = new MySort();
m1.setId(10);
m2.setId(8); LinkedList<MySort> list = new LinkedList<>();
list.add(m1);
list.add(m2); System.out.print(list.get(0).getId() + " ");
System.out.println(list.get(1).getId());
Collections.sort(list, new Comparator<MySort>() {
@Override
public int compare(MySort o1, MySort o2) {
if (o1.getId() - o2.getId() > 0) {
return 1;
} else if (o1.getId() - o2.getId() == 0) {
return 0;
} else {
return -1;
}
}
});
System.out.print(list.get(0).getId() + " ");
System.out.println(list.get(1).getId());
}
} class MySort {
private String name;
private int id; public void setName(String name) {
this.name = name;
} public String getName() {
return name;
} public void setId(int id) {
this.id = id;
} public int getId() {
return id;
}
}

Java的比较器Comparable与Comparator的更多相关文章

  1. Java原来如此-比较器(Comparable、Comparator)

    有时候需要对Collection或者不为单一数字的Array进行比较,有两种方法,1是实现Comparable接口,2是实现Comparator接口. 1.ComParable接口 Comparabl ...

  2. Java基础系列-Comparable和Comparator

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

  3. Java基础之Comparable与Comparator

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

  4. 比较器comparable与comparator的使用

    在Java学习和使用里,工具类与算法类(collections和Arrays)也是我们使用比较多的,在它们里面就包含了comparable与comparator这两种比较器. 一.比较器的分类与概念 ...

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

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

  6. java比较排序Comparable和Comparator

    1       比较排序Comparable和Comparator 1.1      接口作用说明 Comparable和Comparator都是用来实现对象的比较.排序,对比时需要实现Compara ...

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

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

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

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

  9. 比较器Comparable和Comparator

    在java中要实现自定义类的比较,提供了以下两个接口: Comparable(内部排序) int compareTo(Object obj);返回值为int,默认升序排序 Comparator(外部排 ...

随机推荐

  1. 笔记之Utility.DataAccess

    挤出时间看了一些代码,做一些笔记,备忘!!! 现在ORM随处可见,为什么不要已有的ORM而要手动写SQL呢?这肯定是有因为滴,存在必合理嘛! 自认为关于性能.维护.Maybe还有其他的,欢迎大家拍砖! ...

  2. npm install各种命令模式

    npm install 几种命令模式: npm install moduleName 安装模块到项目目录下 npm install -g moduleName npm install -g 将模块安装 ...

  3. .net core autofac asyncinterceptor 异步拦截器帮助包

    autofac使用拦截器实现AOP,是基于Castle.Core的.然而Castle.Core并未提供原生异步支持.所以需要使用帮助类实现,这在autofac官方文档的已知问题中有详细说明: http ...

  4. 基于web的图书管理系统设计与实现(附演示地址)

    欢迎访问博主个人网站,记得收藏哦,点击查看 - - - >>>> 公众号推荐:计算机类毕业设计系统源码,IT技术文章分享,游戏源码,网页模板 小程序推荐:网站资源快速收录--百 ...

  5. win10 随记

    昨天买的台式电脑,今天到了.有点小激动(用了5年的i3笔记本可以稍微休息下了,哈哈) 拿到电脑,和朋友一块,插线...最终连接成功. 记录下过程中的乌龙操作,,, 1.连接好线路后,显示器没反应,(显 ...

  6. redis限频

    做法 使用redis的lua脚本功能来限频 在redis中定时刷新系统时间来作为一个全局的时钟 限频脚本: /** * 获取令牌的lua脚本 */ public final static String ...

  7. ceph踩坑日记之rgw_dynamic_resharding

    1.背景说明 参考说明: https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/html/object_gatewa ...

  8. Django项目打分系统

    Django项目之个人网站 关注公众号"轻松学编程"了解更多. Github地址:https://github.com/liangdongchang/MyWeb.git 感兴趣的可 ...

  9. python框架Django中MTV框架之Template(模板/界面)

    MTV框架之Template(模板/界面) 关注公众号"轻松学编程"了解更多. 1.模板目录位置 应用下 不需要注册 无法跨应用地进行复用 工程下 需要注册 settings.py ...

  10. python求平均数及打印出低于平均数的值列表

    刚学Python的时候还是要多动手进行一些小程序的编写,要持续不断的进行,知识才能掌握的牢.今天就讲一下Python怎么求平均数,及打印出低于平均数的数值列表 方法一: scores1 =  [91, ...