java compar_Java中Comparable和Comparator
Comparable
Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。
此外,实现此接口的对象可以用作有序映射中的键或有序集合中的集合,无需指定比较器。该接口定义如下:
packagejava.lang;import java.util.*;public interface Comparable{public intcompareTo(T o);
}
T表示可以与此对象进行比较的那些对象的类型。
此接口只有一个方法compare,比较此对象与指定对象的顺序,如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
现在我们假设一个Person类,代码如下:
。。
现在有两个Person类的对象,我们如何来比较二者的大小呢?我们可以通过让Person实现Comparable接口:
public class Person implements Comparable{
String name;intage;public Person(String name, intage)
{super();this.name =name;this.age =age;
}publicString getName()
{returnname;
}public intgetAge()
{returnage;
}
@Overridepublic intcompareTo(Person p)
{return this.age-p.getAge();
}public static voidmain(String[] args)
{
Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
System.out.println("排序前");for(Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
Arrays.sort(people);
System.out.println("\n排序后");for(Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
}
}
Comparator
Comparator是比较接口,我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator接口即可。也就是说,我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。该接口定义如下:
packagejava.util;public interface Comparator{intcompare(T o1, T o2);booleanequals(Object obj);
}
注意:1、若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2) 函数,但可以不实现 equals(Object obj) 函数。
2、int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。
现在假如上面的Person类没有实现Comparable接口,该如何比较大小呢?我们可以新建一个类,让其实现Comparator接口,从而构造一个“比较器"。
public class PersonCompartor implements Comparator{
@Overridepublic intcompare(Person o1, Person o2)
{return o1.getAge()-o2.getAge();
}
}
public classPerson
{
String name;intage;public Person(String name, intage)
{super();this.name =name;this.age =age;
}publicString getName()
{returnname;
}public intgetAge()
{returnage;
}public static voidmain(String[] args)
{
Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};
System.out.println("排序前");for(Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
Arrays.sort(people,newPersonCompartor());
System.out.println("\n排序后");for(Person person : people)
{
System.out.print(person.getName()+":"+person.getAge());
}
}
}
Comparable和Comparator区别比较
Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。而Comparator是比较器,我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。
两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑,使其可以匹配一些比较简单的对象,那样就可以节省很多重复劳动了。
java compar_Java中Comparable和Comparator相关推荐
- Java中Comparable和Comparator接口区别分析
本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧. Comparable 简介 Comp ...
- 简单介绍Java中Comparable和Comparator
转载自 简单介绍Java中Comparable和Comparator Comparable 和 Comparator是Java核心API提供的两个接口,从它们的名字中,我们大致可以猜到它们用来做对象之 ...
- java comparator相等_详解Java中Comparable和Comparator接口的区别
详解Java中Comparable和Comparator接口的区别 发布于 2020-7-20| 复制链接 摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一 ...
- Java中Comparable和Comparator实现对象比较
Java中Comparable和Comparator实现对象比较 目录 一. Comparator 二. Comparable 三.比较 当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comp ...
- JAVA语言-比较器Comparator(java中Comparable和Comparator的区别)
文章目录 一.什么是Comparator 二.Java compare方法和compareTo方法 三.java中Comparable和Comparator的区别 Comparator的例子 三.de ...
- Java 中 Comparable 和 Comparator 比较
为什么80%的码农都做不了架构师?>>> 本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示例,对它们的使用方法进行说明. Comp ...
- java compareto方法怎么排序的_深入理解Java中Comparable和Comparator排序
本文有牛旦教育原创,头条首发,转载注明来源. 如何为需要的排序算法选择正确的接口?通过本文的分析讲解,我们会找到答案参考答案. 程序员经常需要将数据库中的元素排序为集合.数组或映射.在Java中,我们 ...
- Java中Comparable和Comparator区别小结
阅读目录 一.Comparable简介 二.Comparator简介 三.Comparable和Comparator区别比较 回到顶部 一.Comparable简介 Comparable是排序接口.若 ...
- Java中Comparable与Comparator的区别
一.概述 Comparable和Comparator都是用来实现集合中元素的比较.排序的. Comparable是在集合内部定义的方法实现的排序,位于java.util下. Comparator是在集 ...
- Java中Comparable和Comparator接口的区别
点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/u010859650/article/details/85009595 Comparable 简介 Comparable 是排序 ...
最新文章
- 斯坦福大学李飞飞团队图像分类课程笔记
- 【干货】深入B端SaaS产品设计核心理念
- LeetCode(9) - Palindrome Number
- C++primer第九章 顺序容器 9.3 顺序容器操作
- C++中string::find()函数和string::npos函数的使用
- 要看方兴东的博客 只能上Google去找他
- Java学习笔记之设计模式(4)适配器模式
- 制造业数字化转型的启明星——低代码开发平台
- 计算机中反三角函数怎么算,计算器怎么算反三角函数?
- 满满干货!邮储银行java面试
- demo:纳税计算器
- SQLite 查询得到今天日期
- 六. 先有鸡还是先有蛋?--SLAM
- CCF: 201409-1-相邻数对(C++)
- 新百家姓出来了,看你排第几位?
- 对计算机应用领域的CAE,我对CAE的了解和想要进行研究的方面
- Neuroimage | 孤独症与功能近红外光谱(fNIRS)综述
- TeXstudio编译提示缺少.sty文件
- 什么时候用重定向,什么时候用请求转发。
- 汇编——十进制数据输入转二进制/十六进制输出(含数字判断,不限位数)