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

当需要排序的集合或数组不是单纯的数字型时,通常可以使用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 里面用户可以自

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502386.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html中属性的作用,html的标签中 unselectable=on 属性的作用

在IE浏览器中&#xff0c;当input获得焦点时&#xff0c;点击有unselectable"on"属性的标签时&#xff0c;不会触发onblur事件。加上该属性的元素不能被选中。< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">< html>< h…

一个控制器怎么转发到另外一个控制器_楼宇自动化系统(BAS),DDC,一个最核心的控制器...

楼宇自动化系统(BAS)&#xff0c;一个熟悉又陌生的系统楼宇自控系统(BAS系统)设有一个中央监控中心&#xff0c;系统配置一个或多个网络控制器&#xff0c;由多条总线或计算机网络将各种功能的控制器与中央工作站相连&#xff0c;完成对空调、给排水、通风、电梯等子系统的监控…

秒表计时器怎么读_秒表怎么读数

展开全部秒表的大圈为秒&#xff0c;小圈为分。若大圈是30分格(顶上写的是30&#xff0c;可能有60格&#xff0c;表明精度到半秒)&#xff0c;小圈里62616964757a686964616fe59b9ee7ad9431333431366239一分钟就分为两小格&#xff0c;读完整的几分&#xff0c;若过了一小格&…

html封装windows,windows 系统封装,打造一份属于自己的系统!

在电脑的使用过程中&#xff0c;由于我们每个人的使用习惯和使用方式不同&#xff0c;所以我们都会对Windows系统进行自己的设置&#xff0c;尤其是一些搞数码软件的&#xff0c;如果不小心系统坏了&#xff0c;重装系统后&#xff0c;还得一一去进行重新设置&#xff0c;非常麻…

daoi php_聊聊这些年用过的AOI

外面下着雨&#xff0c;我在家里宅&#xff0c;听着歌喝着去年的茶&#xff0c;无聊的很&#xff0c;开个话题聊下这些年用过的AOI。某年进入AOI这行&#xff0c;我的很多老同事都早已转行了&#xff0c;由于我没什么过人之处&#xff0c;只会死干&#xff0c; 现在还在做AOI。…

python语言例子_【Python】SimPy的使用示例-Go语言中文社区

使用SimPY进行离散事件仿真 SimPY是一个Python下的第三方库&#xff0c;可以方便的进行离散事件的仿真。仿真速度比较快。下面记录一下我的一点心得&#xff0c;不保证完全正确&#xff0c;供参考。 安装 $ pip install -U simpy pycharm可以再File | Settings | Project: Simu…

所有的图放到一个html,拖放是HTML5标准的组成部分,若想要把drag1图片放入d

dataTransfer 对象主要有两个方法&#xff1a;getData() 和 setData()&#xff0c;用来取值和保存值。setData() 方法的第一个参数&#xff0c;也是 getData() 方法唯一的一个参数&#xff0c;是一个字符串&#xff0c;表示保存的数据类型。IE只定义了"text" 或 &quo…

vue变量传值_VUE 学习——父组件传值给子组件

在我们编写前端代码时&#xff0c;经常遇到的一种场景&#xff0c;子组件需要使用父组件的值&#xff0c;这种情况下&#xff0c;我们可以使用props帮助我们进行父子组件间的通信。这里我们先模拟一个场景&#xff0c;展示如何使用。场景&#xff1a;在父组件修改值&#xff0c…

matlab 最小二乘法拟合_Scripy实现最小二乘法与股票K线回归

python的Scripy提供了丰富的数学工具&#xff0c;python的科学计算包scipy的里面提供了一个函数&#xff0c;可以求出任意的想要拟合的函数的参数。那就是scipy.optimize包里面的leastsq函数。函数原型是&#xff1a;leastsq(func, x0, args(), DfunNone, full_output0, col_de…

html 调高德地图 导航,在H5页面内通过地址调起高德地图实现导航

项目中用到的一个功能是要通过点击地址来实现打开地图app实现地址导航。如下图&#xff1a;实现思路就是在H5页面内通过点击marker图标然后进行当前位置与页面上地址的路程规划与导航。由于项目中用到的是高德地图&#xff0c;所以这里用到的是调起高德地图APP来实现该功能。首…

.jar文件如何打开_ofd发票文件如何打开

有时候大家查找文件的时候会不会觉得很心烦&#xff0c;因为经常能碰到OFD格式的文件&#xff0c;但是我们却不知道怎么打开&#xff0c;造成了很多困扰。我以前也常常遇到这样的情况&#xff0c;但是最近我发现了一个好办法&#xff0c;迫不及待地想分享给大家了&#xff0c;可…

印刷体是什么意思_家长晒出4年级小学霸课前笔记,字迹堪比“印刷体”,老师都羡慕...

目前&#xff0c;很多小学生都在家里上网课&#xff0c;为了达到最佳学习效果&#xff0c;要提前做好预习工作&#xff0c;尤其是语文这一学科&#xff0c;更需要预习。这不就有一位4年级学霸的家长晒出了孩子日常课前预习笔记。他不仅对文章进行了合理的布置和预习&#xff0c…

不使用自带函数求区域的周长_Excel表格中最强大求和函数______DSUM函数

在Excel表格中说起求和函数&#xff0c;朋友们首先会想到的是sum、sumif、和sumifs函数。这篇文章为朋友们分享最强大求和函数&#xff0c;数据库函数之DSUM函数。这个函数不仅能完成各种要求的求和&#xff0c;还可以用于查找。一.DSUM函数说明&#xff1a;1.语法&#xff1a;…

python 用if判断一个数是不是整数_Python基础教程07-函数和模块的使用

在讲解本章节的内容之前&#xff0c;我们先来研究一道数学题&#xff0c;请说出下面的方程有多少组正整数解。x1x2x3x48事实上&#xff0c;上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案。想到这一点问题的答案就呼之欲出了。可以用Python的程序来计算出这个…

计算机科学美国大学专业,2018美国大学计算机科学专业大排名

麻省理工大学麻省理工学院素以世界顶尖的工程学和计算机科学而享誉世界&#xff0c;虽然不是藤校&#xff0c;却是拥有着领先世界一流的计算机科学及人工智能实验室。麻省理工学院大学计算机硕士专业毕业生可从事集成电路应用与系统设计&#xff0c;从事信息技术与计算机应用系…

前端跨域请求get_(单点登录)跨域SSO看这篇文章就够了:前端篇

前言前俩篇文章&#xff0c;我们从概念&#xff0c;聊到了服务器中设计的内容。不知道大家是否觉得通俗易懂呢&#xff1f;接下来的内容则有些偏向前端部分。正文三、Cookie传递3.1、通过URL参数实现跨域信息传递我们要在A域实现写入token到B域&#xff0c;需要在A域设计一个se…

win10 如何锁定计算机,Win10 1909 专业版怎么锁定计算机屏幕

Win10 1909 专业版怎么锁定计算机屏幕?如果我们需要暂时离开计算机&#xff0c;但不想关机或者注销当前登录&#xff0c;那么为了防止未经授权的使用&#xff0c;我们可以将计算机锁定。在本文中&#xff0c;win10之家小编给大家分享如何自动锁定Windows 10计算机。Win10 1909…

qfile指定从多少行开始_大牛进化路上之Linux基础命令,看看你了解多少?

玩转Linux系统还是要从基础命令开始&#xff0c;基础命令是你大牛发展之路的第一步&#xff0c;扎实的基本命令操作功底才能在工作中游刃有余&#xff0c;下面我们就来看看吧。路径切换说明Linux中分绝对路径和相对路径&#xff0c;绝对路径一定是从/开始写的&#xff0c;还可能…

如何开机进入grub界面_如何进入http://192.168.1.1的设置界面 ?

登入192.168.1.1管理界面需要确保前期的硬件连接和已获知路由器的账号密码。接下来详细介绍&#xff1a;1、首先做好准备&#xff0c;检查一下是否已经连接好无线路由器和网线、调制解调器&#xff0c;要确保网络畅通、所有指示灯都正常亮着&#xff1b;2、然后打开手机设置&am…

手机html5雪花飘落,如何使用HTML5canvas实现雪花飘落

这篇文章主要为大家详细介绍了HTML5 canvas实现雪花飘落特效&#xff0c;效果实现引人入胜&#xff0c;很逼真的动画效果&#xff0c;感兴趣的小伙伴们可以参考一下看到网上很多展示html5雪花飞动的效果&#xff0c;确实非常引人入胜&#xff0c;我相信大家也跟我一样看着心动的…