Comparable接口 在java.lang包下,实现了Comparable函数式接口的对象可以自然排序,而数组和集合实现了该接口,所以我们会用Arrays.sort()或Collections.sort...()来排序 Comparable比较大于就返回1,小于返回-1,等于返回0 如果自定义的对象也要排序,就需要实现该接口并且手动重写里面的compareTo()方法 返回值 函数名 解释 int compareTo...(T o) 将此对象与指定的对象进行比较以进行排序 需要排序的自定义对象 public class User implements Comparable{ private int....getAge()) return -1; if (o1.getAge() < o2.getAge()) return 1; return 0; } } 测试(和上面的一样...比较二者 Comparable实现的是自然排序,是对象内部自己实现的 Comparator实现定制排序,是对象之外实现的,借助了外力来推动比较 二者同时存在则使用Comparator排序
本文已收录《Java常见面试题》系列,Gitee 开源地址:https://gitee.com/mydb/interview 在 Java 语言中,Comparable 和 Comparator 都是用来进行元素排序的...然而这个时候,老板有一个需求:需要根据 Person 对象的年龄 age 属性进行倒序,也就是根据 age 属性从大到小进行排序,这个时候就可以请出,我们本文的主角:Comparable 出场了。...和 Comparable 的排序方法是不同的,Comparable 排序的方法是 compareTo,而 Comparator 排序的方法是 compare,具体实现代码如下: import lombok.Getter...int id, int age, String name) { this.id = id; this.age = age; } } 程序的执行结果如下图所示: 扩展...总结 Comparable 和 Comparator 都是用来实现元素排序的,它们二者的区别如下: Comparable 是“比较”的意思,而 Comparator 是“比较器”的意思; Comparable
个 compare(Object obj1, Object obj2) ⽅法进行排序排序Comparable 自然排序。...(无法修改实体类时,直接在调用方创建)总结Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。...Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。...equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。...只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。
那天,小二去马蜂窝面试,面试官老王一上来就甩给了他一道面试题:请问Comparable和Comparator有什么区别?...但它们之间到底有什么区别呢?请随我来,打怪进阶喽! 01、Comparable Comparable 接口的定义非常简单,源码如下所示。...通过上面的两个例子可以比较出 Comparable 和 Comparator 两者之间的区别: 一个类实现了 Comparable 接口,意味着该类的对象可以直接进行比较(排序),但比较(排序)的方式只有一种...我和孙悟空之间有什么区别呢?孙悟空自己实现了 Comparable 接口(他那年代也没有飞机和高铁,没得选),而我可以借助 Comparator 接口(现代化的交通工具)。...好了,关于 Comparable 和 Comparator 我们就先聊这么多。
Comparable 和 Comparator 都有比较的含义,那么他们之前有什么区别?...class HDTV implements Comparable { private int size; private String brand; public HDTV(int...如何选择 如果一个类可以实现 Comparable,那么就可以在类实例之间比较。 Comparator 是在类外部比较,常常是作为一个参数传入到排序方法。...很多场景下,两种方式都可以使用,比如创建 TreeSet 的时候,既可以往构造函数中传入 Comparator 接口,也可以把 TreeSet 的泛型类型实现 Comparable 接口。...参考:https://www.programcreek.com/2011/12/examples-to-demonstrate-comparable-vs-comparator-in-java/
Comparable 定义(只包含一个方法): package java.lang; import java.util.*; public interface Comparable { public...位于包 java.lang下 Comparable & Comparator 都是用来实现集合中元素的比较、排序,区别:Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序...自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,这里的自然顺序就是实现...Comparable接口设定的排序方式。...Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”;而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
对Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo...类似,也是使用Collections.sort() 和 Arrays.sort()来进行排序,也可以对SortedMap 和 SortedSet 的数据结构进行精准的控制,你可以不用实现此接口或者Comparable...TreeSet 和 TreeMap的数据结构底层也是使用Comparator 来实现。不同于Comparable ,比较器可以任选地允许比较null参数,同时保持要求等价关系。...Comparable 和 Comparator 的对比 1、Comparable 更像是自然排序 2、Comparator 更像是定制排序 同时存在时采用 Comparator(定制排序)的规则进行比较...参考: Java 中 Comparable 和 Comparator 比较 https://zhuanlan.zhihu.com/p/24081048 Java 解惑:Comparable 和 Comparator
Comparable和Comparator乍一看像兄弟俩。但是,虽然长得像,使用上却是有很多区别。...我们点进去Collections类源码里边,会发现sort有两个重载方法。一个只需传一个List参数,另一个需要传两个参数:List和Comparator。...其实,这两种方法就对应了Comparable和Comparator的两种用法。我经常使用带两个参数的方法,即需要实现Comparator接口。 使用步骤: 1. 定义待比较的实体类。 2....二、Comparable 这种方式,需要修改User类,实现Comparable接口,然后重写compareTo方法。...Comparable 使用简单,但是对代码有侵入性,需要修改实体类源码。
0x01:Comparable简介 Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序功能。...int compare(T o1, T o2) 是“比较o1和o2的大小”。返回“负数”,意味着“o1比o2小”;返回“零”,意味着“o1等于o2”;返回“正数”,意味着“o1大于o2”。 ...和Comparator区别比较 Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。...两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。...用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑
1.位置 Comparable 位于 java.lang,我们都知道 java.lang包可以说是 java体系中基础包,有 ClassLoader、Class、Object、基本类型等 Comparator...位于 java.util,也就是 java 自带的类库,包括一些常用的集合类、strem、function 所以从这个角度来说,Comparator 也属于类库的一种就是为了方便开发,而 Comparable...2.描述 Comparable: This interface imposes a total ordering on the objects of each class that implements...可以通过 Collections.sort()、Arrays.sort() 方法进行排序,若某对象实现了 Comparable 则该对象的 SortedMap 、SortSet 会自动对对象进行排序,并不需要...Comparator可以对非已经排好序的进行排序,而且还可以对已经有顺序的SortedMap、SortSet 进行排序。
前面我们已经学习过Comparator和Comparable接口的使用,下面来总结一下二者的区别. 1、Comparator接口位于java.util包下,而Comparable接口位于java.lang...包下 2、对于Comparator接口,可以看到它的compare(O方法的参数是两个对象,比如我们队Cat类进行比较,那么这里就是两个要比较的Ca类的对象,所以可以有一个单独的类实现Comparator...因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开,如果使用Comparable接口,那么要比较的类就要实现Comparable:接口才可以 3、关于应用场景...一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable:接口的方式,那么Cat类需要实现Comparable:接口。...那么我们还希望通过age进行排序,这时不希望修改Cat类,那此时就需要使用Comparator接口了 因此,Comparable:接口可以作为实现类的默认排序算法,Comparator接口则用于一个类的扩展排序
Comparable 自然排序 Comparable 在 java.lang 包下,是一个接口,内部只有一个方法 compareTo(): Comparable 可以让实现它的类的对象进行比较...这种顺序称为 自然顺序 compareTo 方法的返回值有三种情况: e1.compareTo(e2) > 0 即 e1 > e2 e1.compareTo(e2) = 0 即 e1 = e2 e1.compareTo...这样将来使用 SortedSet 等根据类的自然排序进行排序的集合容器时可以保证保存的数据的顺序和想象中一致。 上面的第二点如果违反了会怎样呢?...举个例子,如果你往一个 SortedSet 中先后添加两个对象 a 和 b a, b 满足 (!...接口的 Java 核心类的结果都和 equlas 方法保持一致 实现了 Comparable 接口的 List 或数组可使用 Collections.sort() 或者Arrays.sort() 排序
CSDN话题挑战赛第2期 参赛话题:学习笔记 前言 博主在很早之前写过一篇面向对象编程的文章,其中粗略的介绍了一下Comparable接口的使用,现在问题来了,Comparabe接口和Comparator...96), new Student("王五", 97), new Student("赵六", 92), } 按照我们之前的理解, 数组工具类我们有一个现成的...而程序开发中遵循一个开闭原则: 一段程序应该对扩展开放,对修改关闭。 写好的代码别老改,要有新场景,就拓展新代码,不要影响老代码。...以下是Collections类下的sort方法,可以传入继承Comparable接口的泛型对象,也可以传入当前list 和 一个comparator比较器。...如果传入list和coparator的话,就会调用compare()方法 3.2 区别 Comparable接口位于java.lang包下,Comparator位于java.util包下 Comparable
前言 上一文简单对 Java 中的Comparator 接口进行了说明,今天我们来看看另一个和它非常类似的接口 java.lang.Comparable 。 2....Comparable Comparable 接口同样只有一个抽象方法 int compareTo(T o),其规则和Comparator 的int compare(T o1, T o2)类似。...// 符合语法但是不符合设计意图的操作 Comparable comparable = String::length; 通常情况下Comparable 希望被作为对象的一个特性来表达该对象的实例之间是相互比较的...比如电影有按照年份进行比较的特性。...3.Comparator vs Comparable Comparator 和 Comparable 很相似,但是它们也是有一些不一样的地方的,主要表现在: 视角不同,Comparable 通常是对象自带的比较属性而
Comparable和Comparator的区别和用法 1、代码 import java.util.ArrayList; import java.util.Arrays...和Comparator的用法 * 2、引用类型数组的排序和遍历 排序: Arrays.sort() 遍历:Arrays.Stream().forEach() * 3、引用类型集合的排序和遍历...3、总结 对于引用类型的数组和引用类型的集合,需要自己定义规则才能对其进行排序。...其中有两个方法可以实现:Comparable和Comparator (1)、需要排序的类实现Comparable接口和重写comparaTo()方法 (2)、自己写一个比较类class,实现Comparator...实现接口和重写方法时,注意指定的泛型类型是需要比较的类class。
java中Comparable和Comparator的区别 简介 java.lang.Comparable和java.util.Comparator是两个容易混淆的接口,两者都带有比较的意思,那么两个接口到底有什么区别...Comparable Comparable是java.lang包下面的接口,lang包下面可以看做是java的基础语言接口。...几乎所有的数字类型对象:Integer, Long,Double等都实现了这个Comparable接口。...在讲Comparable的时候,我们提到Comparable指定了对象的natural ordering,如果我们在添加到可排序集合类的时候想按照我们自定义的方式进行排序,这个时候就需要使用到Comparator...举个例子 最后,我们举一个natural ordering和Comparator的例子: @Test public void useCompare(){ List<Integer
在java中提供了两种排序方式:Comparable和 Comparator,它们两个看起来非常的相似,在不是很了解的情况下不知道如何使用,什么情况下使用哪个进行排序,接下来就看下它们的一个区别和使用方式...: Comparable 首先看下 Comparable,Comparable 它可以看成是一个排序接口,一个类实现了该接口,就表示该类本身具有排序的功能,如果对该类的集合或者数组进行排序,则可以使用..., 但是有一点需要注意的是:因为 e.equal(null) 会返回false,所以,当我们需要比较的对象为 null 的时候,应该抛出一个 空指针异常。...接下来看下 Comparable 接口的方法,该接口下只有一个方法: ?...总结: Comparable 它是一个排序接口,实现该接口的类本身具有排序的功能,可以直接使用 Collections.sort() 和 Arrays.sort() 进行排序而不用再指定额外的比较器;也可以直接放入到
3.5 Comparable的用法 马克-to-win:前面讲过进入TreeSet的每个元素是都排了序的,如果被添加的元素是我们自己定义的,就需要告诉TreeSet排序的规则,这个规则就要在Comparable...例:3.5.1 /*why in the past never implements Comparable?...becasue Integer claas and String class both implements this Comparable. java.lang.Object java.lang.String...All Implemented Interfaces: CharSequence, Comparable, Serializable */ import java.util.*; //Comparable...report error, because it will search for Comparable interface. */ class Worker implements Comparable
Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下。...compareTo 方法的返回值有三种情况: e1.compareTo(e2) > 0 即 e1 > e2 e1.compareTo(e2) = 0 即 e1 = e2 e1.compareTo(e2)...举个例子,如果你往一个 SortedSet 中先后添加两个对象 a 和 b,a b 满足 (!...实际上所有实现了 Comparable 接口的 Java 核心类的结果都和 equlas 方法保持一致。...这就是 Comparable 和 Comparator 的区别。
我们通过x.compareTo(y)来比较x和y的大小。若返回负数,则x比y小,若返回0,则x=y,若返回整数,则x大于y。...二,这里,自己去编写一个静态内部类来进行测试Comparable接口的使用。...Id:2,Name:Marry,Age:21 Id:3,Name:John,Age:18 三,接下来看下Comparator接口的结构图,这就是一个函数式接口,函数式接口就是只有一个方法,但是它可以有其它的默认方法...和Comparator接口都是用来实现集合中元素的比较和排序的,当我们自己定义的一个类需要进行排序时,就要考虑实现Comparable或者Comparator接口,这样就可以根据指定的属性进行排序。...六,何时使用Comparable接口,何时使用Comparator接口?
领取专属 10元无门槛券
手把手带您无忧上云