comparetor(Java中Comparator接口的用法)

:暂无数据 2026-06-27 09:40:05 2

comparetor(Java中Comparator接口的用法)

大家好,如果您还对comparetor不太了解,没有关系,今天就由本站为大家分享comparetor的知识,包括Java中Comparator接口的用法的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

本文目录

Java中Comparator接口的用法

在java编程中,如果要对集合对象或数组对象进行排序,需要实现Comparator接口以达到目标,用法如下(模拟下在集合对象中对日期属性进行排序):

一、实体类Step

package com.ljq.entity;
/**
 * 运号单流程
 * 
 * @author Administrator
 * 
 */
public class Step{
    /** 处理时间 */
    private String acceptTime = "";
    /** 快件所在地点 */
    private String acceptAddress = "";
    public Step() {
        super();
    }
    public Step(String acceptTime, String acceptAddress) {
        super();
        this.acceptTime = acceptTime;
        this.acceptAddress = acceptAddress;
    }
    public String getAcceptTime() {
        return acceptTime;
    }
    public void setAcceptTime(String acceptTime) {
        this.acceptTime = acceptTime;
    }
    public String getAcceptAddress() {
        return acceptAddress;
    }
    public void setAcceptAddress(String acceptAddress) {
        this.acceptAddress = acceptAddress;
    }
}

二、实现Comparator接口

package com.ljq.entity;
import java.util.Comparator;
import java.util.Date;
import com.ljq.util.UtilTool;
/**
 * 对Step类进行排序
 * 
 * @author Administrator
 *
 */
public class StepComparator implements Comparator《Step》{
    /**
     * 如果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;
    }
}

三、代码测试

package junit;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
public class StepComparatorTest {
    @Test
    public void sort() throws Exception{
        List《Step》 steps=new ArrayList《Step》;
        //对集合对象进行排序
         StepComparator comparator=new StepComparator();
        Collections.sort(steps, comparator);
        if(steps!=null&&steps.size()》0){
            for(Step step:steps){
               System.out.println(step.getAcceptAddress());
               System.out.println(step.getAcceptTime());
            }
        }
    }
}

comparable和comparative的区别comparable和comparator

  侧重点不同:comparable表示可比性,comparative强调相对性。比较事物数量不同:comparable“可比较的”、“比得上的”,表示两者在某一点或几点上有相似之处,可以进行比较的。具体词性不同:comparable是形容词,意为“类似的;同等的”。comparative即是形容词,也是名词。作形容词时意为“比较的;相当的”,作名词时意为“比较级;对手”。
  例句:TheAntarcticiscomparabletospace:It’sextremelycolddownthereandyouspendalotoftimeindoors。南极洲和太空有一定的可比性:那里千里冰封、万里雪飘,人们大部时间都躲在室内。
  Thisisthelargestsuchdeficitsincecomparablerecordsbeganin1998。这是自1998年以来可比数据中逆差最大的一次。
  Thisisyourcomparativeadvantage。这是你们的比较优势。Whydon’twedosomecomparativeadvertising?我们为什么不能做一些对比广告呢?

java Comparator中的返回值和排序有什么关系啊,求解释!!!!!

负数代表左值小于右值,排在上面
正数代表左值大于右值,排在下面
0代表左值等于右值,排在上面
可以这样理解:排序就是比较谁大谁小,将小的放在前面,大的放在后面。例如当返回负数的时候,表明第一个数应该排在第二个数的上面。

java中comparable接口与comparator接口的区别,&&请求代码示例,非常谢谢

数值用比较运算符》 《 ==等来比较大小,字符串用equals比较内容是否相等。但是对象怎么比较大小呢?用这两接口Comparator和Comparable
两者区别:
Comparator接口在java.util包下,用于提供比较的规则,常和Arrays.sort(对象数组,比较规则);或Collections.sort(集合,比较规则);搭配使用。前面的数组或集合按照后面的比较规则来排序。比较规则是Comparator接口类型的对象,可创建类实现该接口,重写compare方法,在方法体自定义比较规则,价格重量点击率都可以,对参数中传入的两个对象比较,根据返回值o1》o1默认升序排列
Comparable接口在java.lang包下,实现compareTo方法对对象排序,该方法只有一个参数
public int compareTo(Object obj)
对象.obj ==0 对象==obj
对象.obj ==正数 对象》obj
对象.obj ==负数 对象《obj
综上所述:
Comparator常用于提供比较规则,需搭配使用
Comparable:要比较的对象直接实现该接口
例子:使用Comparator接口
package shwg.action;
import java.util.Arrays;
import java.util.Comparator;
//按字符串长度比较对象大小
public class Demo {
public static void main(String args) {
String names = {"Tom","Jerry","Andy","Lee"};
Arrays.sort(names, new ByLength());
System.out.println(Arrays.toString(names));
}
}
class ByLength implements Comparator《String》{
//只需两个随机对象o1 o2间比较,若compare方法返回正数,
// 会按升序排列(长度由小到大排)
public int compare(String o1, String o2) {
int r = o1.length() - o2.length();
if (r == 0) {
//若长度相等,根据字符串首字母大小比,加上符号是为了首字母按字典顺序排
return -(o1.charAt(0) - o2.charAt(0));
}
return r;
}
}
例子2:使用Comparable接口
package shwg.action;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
//注意:只要实现Comparable接口里面的compareTo方法,那么该方法会被自动调用
public class Name implements Comparable{
private String firstName, lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String toString() {return firstName + " " + lastName;}
//同一个类型的对象比较才有意义,可以用泛型《》约定
public int compareTo(Object o) {
Name a = (Name)o;
//lastName是String类型,已实现Comparable接口,可直接调compareTo方法
//比较时,从首字母往后一个个字母比ASCII值得大小排序
int lastCmp = lastName.compareTo(a.lastName);
//lastName相同比较firstName,将整型值返回
return lastCmp !=0 ? lastCmp : firstName.compareTo(a.firstName);
}
//测试
public static void main(String args) {
List l = new LinkedList();
l.add(new Name("Karl", "M"));
l.add(new Name("Steven", "Lee"));
l.add(new Name("Jhon", "O"));
Collections.sort(l);
System.out.println(l);
}
}
我一个一个字打的希望采纳,你可以拿去程序中运行比较。

Comparable和Comparator接口是干什么的它们的区别是什么

【答案】:Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。具体来说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。
Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

java中Comparable和Comparator两种比较器的区别

Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较逻辑。可以把Comparable理解为内部比较器,而Comparator是外部比较器,基本的写法如下:
class Apple implements Comparable《Apple》{
int id;
double price;
public Apple(int id, double price) {
this.id = id;
this.price = price;
}
public int compareTo(Apple o) {
//return Double.compare(this.getPrice(),o.getPrice());
if (Math.abs(this.price-o.price)《0.001)
return 0;
else
return (o.price-this.price)》0?1:-1;
}
@Override
public String toString() {
return "Apple{" +
"id=" + id +
", price=" + price +
’}’;
}
}
class AESComparator implements Comparator《Apple》{
public int compare(Apple o1, Apple o2) {
if (Math.abs(o1.price-o2.price)《0.001)
return 0;
else{
return (o1.price-o2.price)》0?1:-1;
}
}
}
实现了Comparable接口的类需要实现compareTo()方法,传入一个外部参数进行比对,实现了Comparator接口的方法需要实现compare()方法,对外部传入的两个类进行比较,从而让外部方法在比较时调用。
两者的区别是实现Comparator接口代码更加灵活,可以定义某个类的多个比较器,从而在排序时根据实际场景自由调用,而Comparable接口实现后便不能改动。两种接口的调用方式如下:
class AESComparator implements Comparator《Apple》{
public int compare(Apple o1, Apple o2) {
if (Math.abs(o1.price-o2.price)《0.001)
return 0;
else{
return (o1.price-o2.price)》0?1:-1;
}
}
}
class DESComparator implements Comparator《Apple》{
public int compare(Apple o1, Apple o2) {
if (Math.abs(o1.price-o2.price)《0.001)
return 0;
else {
return (o1.price-o2.price)》0?-1:1;
}
}
}
public static void main(String args) {
Apple apple1 = new Apple(1,4.8);
Apple apple2 = new Apple(2,5.9);
Apple apple3 = new Apple(3,8.5);
List《Apple》 list = new ArrayList《Apple》();
list.add(apple1);
list.add(apple3);
list.add(apple2);
System.out.println("Comparable==========");
System.out.printf("this list of apples: %s\n",list);
Collections.sort(list);
System.out.printf("this list of apples: %s\n",list);
System.out.println("Comparator==========");
System.out.printf("this list of apples: %s\n",list);
Collections.sort(list,new DESComparator());
System.out.printf("this list of apples: %s\n",list);
Collections.sort(list,new AESComparator());
System.out.printf("this list of apples: %s\n",list);
}
}
上述代码存在的问题,不能在比较器中进行double类型的减法操作,因为对于值比较大的double,减法操作容易导致值的溢出,java7对每一种包装类型的比较新增了compare()方法,改造后的代码如下:
class Apple implements Comparable《Apple》{
int id;
double price;
public Apple(int id, double price) {
this.id = id;
this.price = price;
}
public int compareTo(Apple o) {
return Double.compare(this.price,o.price);
}
@Override
public String toString() {
return "Apple{" +
"id=" + id +
", price=" + price +
’}’;
}
}
class AESComparator implements Comparator《Apple》{
public int compare(Apple o1, Apple o2) {
return Double.compare(o1.price,o2.price);
}
}
class DESComparator implements Comparator《Apple》{
public int compare(Apple o1, Apple o2) {
return Double.compare(o2.price,o1.price);
}
}
查看Double.compare的源码如下
public static int compare(double d1, double d2) {
if (d1 《 d2)
return -1; // Neither val is NaN, thisVal is smaller
if (d1 》 d2)
return 1; // Neither val is NaN, thisVal is larger
// Cannot use doubleToRawLongBits because of possibility of NaNs.
long thisBits = Double.doubleToLongBits(d1);
long anotherBits = Double.doubleToLongBits(d2);
return (thisBits == anotherBits ? 0 : // Values are equal
(thisBits 《 anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
1)); // (0.0, -0.0) or (NaN, !NaN)
}

comparable和Comparator的区别

comparable&Comparator都是用来实现集合中的排序的,只是Comparable是在集合内部定义的方法实现的排序,Comparator是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义Comparator接口的方法compare()或在集合内实现Comparable接口的方法compareTo()。
Comparable是一个对象本身就已经支持自比较所需要实现的接口(如StringInteger自己就可以完成比较大小操作)
而Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

Comparable 和 Comparator 有什么区别

区别:comparable是形容词,指可比较的;comparator是名词,指比较器、比较装置。联系:它们都是由动词compare(比较)派生出来的单词。

关于comparetor和Java中Comparator接口的用法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

comparetor(Java中Comparator接口的用法)

本文编辑:admin
paracomparetoror

本文相关文章:


parameters error(error C2660: ’strcmp’ : function does not take 1 parameters Error executing cl.exe.)

parameters error(error C2660: ’strcmp’ : function does not take 1 parameters Error executing cl.exe.)

本篇文章给大家谈谈parameters error,以及error C2660: ’strcmp’ : function does not take 1 parameters Error executing cl.exe.对应的知识点,希望

2026年8月4日 16:20

花体文字转化器(帮忙把I love you forever转换成花体,,要下面这种效果~~谢谢)

花体文字转化器(帮忙把I love you forever转换成花体,,要下面这种效果~~谢谢)

今天给各位分享帮忙把I love you forever转换成花体,,要下面这种效果~~谢谢的知识,其中也会对帮忙把I love you forever转换成花体,,要下面这种效果~~谢谢进行解释,如果能碰巧解决你现在面临的问题,别忘了关注

2026年8月14日 18:30

ps人像磨皮插件(PS磨皮滤镜软件Portraiture3汉化安装教程及使用方法图解)

ps人像磨皮插件(PS磨皮滤镜软件Portraiture3汉化安装教程及使用方法图解)

本篇文章给大家谈谈ps人像磨皮插件,以及PS磨皮滤镜软件Portraiture3汉化安装教程及使用方法图解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年8月10日 20:50

solidworks2012安装(同一台电脑怎么装两个不同的solidworks版本,比如2015和2012)

solidworks2012安装(同一台电脑怎么装两个不同的solidworks版本,比如2015和2012)

这篇文章给大家聊聊关于solidworks2012安装,以及同一台电脑怎么装两个不同的solidworks版本,比如2015和2012对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年7月18日 07:10

subquery returns more than 1 row(mysql连表查询报错:Subquery returns more than 1 row)

subquery returns more than 1 row(mysql连表查询报错:Subquery returns more than 1 row)

今天给各位分享mysql连表查询报错:Subquery returns more than 1 row的知识,其中也会对mysql连表查询报错:Subquery returns more than 1 row进行解释,如果能碰巧解决你现在面

2026年9月12日 15:20

word是程序设计语言吗(word属于应用软件吗)

word是程序设计语言吗(word属于应用软件吗)

大家好,word是程序设计语言吗相信很多的网友都不是很明白,包括word属于应用软件吗也是一样,不过没有关系,接下来就来为大家分享关于word是程序设计语言吗和word属于应用软件吗的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我

2026年9月6日 20:40

or什么意思?c语言编程题,用for循环!急急急

or什么意思?c语言编程题,用for循环!急急急

今天给各位分享or什么意思的知识,其中也会对or什么意思进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月2日 07:10

consolidator(急求forwarder;intermodal company;consolidator;agent;carrier;freight broker的区别~~谢谢!)

consolidator(急求forwarder;intermodal company;consolidator;agent;carrier;freight broker的区别~~谢谢!)

“consolidator”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看consolidator(急求forwarder;intermodal company;consolidator;agent;carrier;frei

2026年8月29日 21:30

为什么idea里没有for(for和to都是“给”的意思,两者用法有什么区别)

为什么idea里没有for(for和to都是“给”的意思,两者用法有什么区别)

本篇文章给大家谈谈为什么idea里没有for,以及for和to都是“给”的意思,两者用法有什么区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年8月21日 12:00

oracle触发器是什么(oracle触发器的具体定义,什么时候用到!其优点是什么!)

oracle触发器是什么(oracle触发器的具体定义,什么时候用到!其优点是什么!)

大家好,oracle触发器是什么相信很多的网友都不是很明白,包括oracle触发器的具体定义,什么时候用到!其优点是什么!也是一样,不过没有关系,接下来就来为大家分享关于oracle触发器是什么和oracle触发器的具体定义,什么时候用到!

2026年8月14日 04:10

更多文章:


二进制转换十进制函数(二进制如何转换成十进制数)

二进制转换十进制函数(二进制如何转换成十进制数)

这篇文章给大家聊聊关于二进制转换十进制函数,以及二进制如何转换成十进制数对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年9月22日 01:30

大一程序设计基础题库(c语言程序设计试题)

大一程序设计基础题库(c语言程序设计试题)

今天给各位分享c语言程序设计试题的知识,其中也会对c语言程序设计试题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月22日 01:00

方舟生存进化新物种图鉴中英文对照图鉴 庞马资料图鉴 庞马(Equus magnus)?植物大战僵尸英文版图鉴

方舟生存进化新物种图鉴中英文对照图鉴 庞马资料图鉴 庞马(Equus magnus)?植物大战僵尸英文版图鉴

各位老铁们,大家好,今天由我来为大家分享图鉴英文,以及方舟生存进化新物种图鉴中英文对照图鉴 庞马资料图鉴 庞马(Equus magnus)的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,

2026年9月22日 00:10

servlet容器配置(web.xml不包含哪些定义)

servlet容器配置(web.xml不包含哪些定义)

大家好,servlet容器配置相信很多的网友都不是很明白,包括web.xml不包含哪些定义也是一样,不过没有关系,接下来就来为大家分享关于servlet容器配置和web.xml不包含哪些定义的一些知识点,大家可以关注收藏,免得下次来找不到哦

2026年9月21日 22:40

全球著名软件公司?oracle究竟是什么软件

全球著名软件公司?oracle究竟是什么软件

各位老铁们,大家好,今天由我来为大家分享软件公司,以及全球著名软件公司的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

2026年9月21日 18:50

html document对象(载入浏览器的html文档都会成为document的对象吗)

html document对象(载入浏览器的html文档都会成为document的对象吗)

其实html document对象的问题并不复杂,但是又很多的朋友都不太了解载入浏览器的html文档都会成为document的对象吗,因此呢,今天小编就来为大家分享html document对象的一些知识,希望可以帮助到大家,下面我们一起来

2026年9月21日 16:00

安装包怎样下载mysql(如何在官网上下载可安装版的MySQL数据库)

安装包怎样下载mysql(如何在官网上下载可安装版的MySQL数据库)

大家好,安装包怎样下载mysql相信很多的网友都不是很明白,包括如何在官网上下载可安装版的MySQL数据库也是一样,不过没有关系,接下来就来为大家分享关于安装包怎样下载mysql和如何在官网上下载可安装版的MySQL数据库的一些知识点,大家

2026年9月21日 15:30

威廉尖叫音效在线(渴求《勇敢的心》的配乐a gift of a thistle下载)

威廉尖叫音效在线(渴求《勇敢的心》的配乐a gift of a thistle下载)

各位老铁们,大家好,今天由我来为大家分享威廉尖叫音效在线,以及渴求《勇敢的心》的配乐a gift of a thistle下载的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈

2026年9月21日 15:20

wordpress建站教程视频(WordPress建站的基本流程)

wordpress建站教程视频(WordPress建站的基本流程)

这篇文章给大家聊聊关于wordpress建站教程视频,以及WordPress建站的基本流程对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年9月21日 14:00

fortune短语搭配(fortune什么意思)

fortune短语搭配(fortune什么意思)

“fortune短语搭配”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看fortune短语搭配(fortune什么意思)!

2026年9月21日 13:50

最近更新

如何提升网站导航的便捷性?
2026-09-22 02:13:58 浏览:0
网店建设初期预算应该如何规划?
2026-09-22 02:13:30 浏览:0
全国商城网站建设需要哪些功能模块
2026-09-22 02:13:29 浏览:0
上海网络营销怎么才能做好?
2026-09-22 02:12:57 浏览:0
广东网站建设怎么一步步完成?
2026-09-22 02:12:32 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:22
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:13
oppo a9拆机教程(oppoa9拆机教程)
2026-06-13 10:40:02 浏览:12
标签列表