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

A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as sorted sets or sorted maps), or to provide an ordering for collections of objects that don't have a natural ordering. ------API

对字符串List可以直接sort进行排序, 那是因为String 这个对象已经帮我们实现了 Comparable接口 , 所以我们的 Person 如果想排序, 也要实现一个比较器。

一. Comparator

对Linkedlist存储的对象进行排序

import java.util.Comparator;

import java.util.LinkedList;

class Person{

private float height;

private String name;

Person(float height)

{

this.height=height;

}

public float getHeight() {

return height;

}

public void setHeight(float height) {

this.height = height;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

class PersonHeight implements Comparator{

@Override

//重写compare方法,return<0不变,return>0则交换顺序(保持升序)

public int compare(Person e1, Person e2) {

if(e1.getHeight() < e2.getHeight()){

return 1;

} else {

return -1;

}

}

}

public class Question3 {

public static void main(String[] args) {

Person p1=new Person(23.4f);

p1.setName("Stud1");

Person p2=new Person(2.34f);

p2.setName("Stud2");

Person p3=new Person(34.32f);

p3.setName("Stud3");

Person p4=new Person(56.45f);

p4.setName("Stud4");

Person p5=new Person(21.4f);

p5.setName("Stud5");

LinkedList al=new LinkedList();

al.add(p1);

al.add(p2);

al.add(p3);

al.add(p4);

al.add(p5);

//调用sort方法,实现排序

Collections.sort(al, new PersonHeight());

//遍历输出

for(Person p:al)

System.out.println(p.getName());

}

}

附加:

//对日期进行排序

/**

* 如果o1小于o2,返回一个负数;如果o1大于o2,返回一个正数;如果他们相等,则返回0;

*/

@Override

public int compare(Step o1, Step o2) {

Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);

Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);

//对日期字段进行升序,如果欲降序可采用before方法

if(acceptTime1.after(acceptTime2)) return 1;

return -1;

}

二. Comparable

import java.util.Collections;

import java.util.Comparator;

import java.util.LinkedList;

class Person implements Comparable{

private float height;

private String name;

Person(float height)

{

this.height=height;

}

public float getHeight() {

return height;

}

public void setHeight(float height) {

this.height = height;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public int compareTo(Object o) {

// TODO Auto-generated method stub

if(this.height>((Person)o).height){

return 1;

}else

return -1;

}

}

public class Question3 {

public static void main(String[] args) {

Person p1=new Person(23.4f);

p1.setName("Stud1");

Person p2=new Person(2.34f);

p2.setName("Stud2");

Person p3=new Person(34.32f);

p3.setName("Stud3");

Person p4=new Person(56.45f);

p4.setName("Stud4");

Person p5=new Person(21.4f);

p5.setName("Stud5");

LinkedList al=new LinkedList();

al.add(p1);

al.add(p2);

al.add(p3);

al.add(p4);

al.add(p5);

Collections.sort(al);

for(Person p:al)

System.out.println(p.getName());

}

}

三.比较

Comparable 定义在 Person类的内部。

Comparator 是定义在Person的外部的, 此时我们的Person类的结构不需要有任何变化。

两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,

但是需要修改源代码, 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义

的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自

己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。

comparator 字符串比较大小_Java中Comparable和Comparator实现对象比较相关推荐

  1. comparator 字符串比较大小_java – 如何使用Comparator比较空值?

    我有几个比较器 – 一个用于日期,一个用于小数,一个用于百分比等. 起初我的十进制比较器看起来像这样: class NumericComparator implements Comparator { ...

  2. java 时间字符串比较大小_java中如何比较两个时间字符串的大小

    思路: 先都转换成日期.然后再用毫秒数进行比较. 下面是简单的例子: function tab(date1,date2){ var oDate1 = new Date(date1); var oDat ...

  3. Java中Comparable和Comparator实现对象比较

    Java中Comparable和Comparator实现对象比较 目录 一. Comparator 二. Comparable 三.比较 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ...

  4. Java中Comparable和Comparator接口区别分析

    本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...

  5. 简单介绍Java中Comparable和Comparator

    转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...

  6. java comparator相等_详解Java中Comparable和Comparator接口的区别

    详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...

  7. JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)

    文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...

  8. java comparable null_Java中Comparable和Comparator你知多少?

    前言: 我喜欢这种遨游在Java的世界里,精心研究学习新鲜事物的感觉,即便再小再细再微不足道的东西,也让我乐此不疲,同时我也更愿意将我所会的东西分享出来供大家学习以及方便自己日后回顾.好了,闲话不多说 ...

  9. Java 中 Comparable 和 Comparator 比较

    为什么80%的码农都做不了架构师?>>>    本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...

最新文章

  1. MMSE(Minimum Mean Square Error)
  2. MySQL数据库test连接语句_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!...
  3. 今日最佳:导师给你指了一个研究方向后...
  4. NYOJ 6 喷水装置(一) 贪心算法 之 区间覆盖问题
  5. 浏览器滚动的详细解释 Vue 固定滚动位置的实现
  6. php中d是什么文件,后缀php是什么文件
  7. 2017.7.31.生活记录
  8. 51单片机实现蜂鸣器播放天空之城
  9. PHP 5 echo 和 print 语句
  10. Java实现QQ机器人
  11. NOI WC 2019 小结
  12. VUE基础用法(四)
  13. 安卓笔记-视频版(还没学完)
  14. Live800:在线客服系统排名是怎么样的?
  15. CreateFontIndirect
  16. ChatGPT接入微信公众号(手把手教学)
  17. Mavlink协议概要
  18. IE系列兼容性hack大全
  19. 分享几个实用,装逼的cmd命令。
  20. BZOJ1123BLO Tarjan割点

热门文章

  1. PHPCMS V9 按浏览次数排行调用文章
  2. Sql2005 PIVOT运算符的操作
  3. QQ空间及邮箱验证码登录的校验方式及自动登录的解决方案
  4. linux的系统移植——交叉编译器
  5. 【剑指offer】面试题47:礼物的最大价值(Java)
  6. Leetcode--671. 合并二叉树
  7. 用python设计学生管理系统_基于python和tkinter实现的一个简单的学生信息管理系统...
  8. 【matlab】画图的文字调整大小
  9. nginx+uWSGI + django部署项目
  10. python读取与写入json+csv变成coco的json文件+安装labelme