首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何比较?Comparable还是Comparator

在思考一秒钟之后,嗯,还不行,哪天老娘又要按编号排,哪哪天又要改回来,我岂不是还得改来改去,于是乎,第二位主角登场Comparator public class GoodsNumCompartor implements...Comparator { @Override public int compare(Goods o1, Goods o2) { if (o1.getNum...)==o2.getNum())return 0; else return -1; } } public class GoodsDateCompartor implements Comparator...结语 实现comparable接口或定义一个比较器都可实现自定义对象的比较,不同的是,comparable需要修改原本的类信息来加入比较的逻辑;而比较器的方式将类本身的定义和类比较的定义进行了分离,耦合性降低了...,灵活性增加了,而且通过增加比价器,我们可以增加多种比较方式。

39220
您找到你想要的搜索结果了吗?
是的
没有找到

java进阶|比较器Comparable和Comparator

这个比较接口只包含了一个compareTo()方法的接口,Comparable是一个排序接口,当我们定义的类实现了该接口,就说明了该类支持排序。...我们通过x.compareTo(y)来比较x和y的大小。若返回负数,则x比y小,若返回0,则x=y,若返回整数,则x大于y。...这里编写了一个示例程序用于测试Comparator接口的使用,Comparator比较器接口,若要实现某个本身不支持排序的类,可以通过定义一个Comparator接口来实现类的排序。...接口都是用来实现集合中元素的比较和排序的,当我们自己定义的一个类需要进行排序时,就要考虑实现Comparable或者Comparator接口,这样就可以根据指定的属性进行排序。...当我们在对要排序的排序规则比较固定,则考虑使用Comparable接口,若要对排序的类的排序规则是经常变化的,那我们就考虑使用Comparator接口。

67330

Java知识点——Comparator比较

Comparator接口包含很多方便的静态方法来创建比较器。这些方法可以用于lambda达 式或方法引用。...静态comparing方法取一个“键提取器”函数,它将类型T映射为一个可比较的类型(如String) 对要比较的对象应用这个函数,然后对返回的键完成比较。...可以把比较器与thenComparing方法串起来,例如: Array.sort(people, Comparator.comparing(Peron::getLastName) .thenComparing...可以为comparing和thenComparing方法提取的键指定一个比较器,例如,可以如下根据人名长度进行排序: Array.sort(people, Comparator.comparing(Peron...(…)) nullFirst方法需要一个比较器,在这里就是比较两个字符串的比较器,naturalOrder 可以为任何实现了Comparable的类建立一个比较器。

1.2K30

Comparable和Comparator

java.lang包下,实现了Comparable函数式接口的对象可以自然排序,而数组和集合实现了该接口,所以我们会用Arrays.sort()或Collections.sort()来排序 Comparable比较大于就返回...小于返回-1,等于返回0 如果自定义的对象也要排序,就需要实现该接口并且手动重写里面的compareTo()方法 返回值 函数名 解释 int compareTo(T o) 将此对象与指定的对象进行比较以进行排序...Comparator 在java.util包下,实现该接口的对象可以精确控制排序的顺序,还可以将该比较器传递给Collections.sort或Arrays.sort以实现控制顺序 实现该接口需要重写里面的...implements Comparator{ @Override public int compare(User o1, User o2) {...比较二者 Comparable实现的是自然排序,是对象内部自己实现的 Comparator实现定制排序,是对象之外实现的,借助了外力来推动比较 二者同时存在则使用Comparator排序

47820

Comparable和Comparator

出处comparable 接⼝实际上是出⾃ java.lang 包 它有⼀个 compareTo(Object obj) ⽅法进行排序comparator 接⼝实际上是出⾃ java.util 包它有⼀...(实体类实现)Comparator 是定制排序。(无法修改实体类时,直接在调用方创建)总结Java提供了只包含一个compareTo()方法的Comparable接口。这个方法可以个给两个对象排序。...Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。...equals()方法需要一个对象作为参数,它用来决定输入参数是否和comparator相等。...只有当输入参数也是一个comparator并且输入参数和当前comparator的排序结果是相同的时候,这个方法才返回true。

35820

Java Comparable 与 Comparator

这就需要去实现comparable接口,这是一个形容词,也就是表明,对象是可比较大小的,那自然就可以排序了。...Paste_Image.png 这就根据银行余额的值返回了正确的结果,所以我们知道,要对对象进行排序,首先一定要是可比较大小的,不然怎么排序,要可比较大小,就需要继承实现comparable接口,实现里面的...显然这是不现实的,因为这些都是在jdk默认提供的api里,这时候,我们发现,还有一个comparator接口。...Collections的sort()方法有另一个重载的版本,可接受java.util.Comparator接口的的实例对象,如果你使用这个版本,排序方式就将根据Comparator的compare()定义來決定...Paste_Image.png 在Java中,根据顺序有关的行为要么是实现了comparable接口,要么就是实现了comparator接口类型。

36210

Comparable 与 Comparator 浅析

Comparable和Comparator接口都是用来比较大小的,首先来看一下Comparable的定义: package java.lang; import java.util.*; public interface...compareTo方法不但允许进行简单的等同性进行比较,而且语序执行顺序比较,除此之外,它与Object的equals方法具有相似的特征,它还是一个泛型。...而 Comparator比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。...前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。可以说前者属于 “静态绑定”,而后者可以 “动态绑定”。...我们不难发现:Comparable 相当于 “内部比较器”,而 Comparator 相当于 “外部比较器”。 转载声明:本文转载自「精讲JAVA」。

47240

Comparable和Comparator的区别

.*; public interface Comparable { public int compareTo(T o); } Comparator 定义(Comparator 接口仅仅只包括两个函数...(Object obj); } Comparator位于包java.util下,而Comparable位于包 java.lang下 Comparable & Comparator 都是用来实现集合中元素的比较...、排序,区别:Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序。...Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”;而Comparator比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。...用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。

27730

Comparable 与 Comparator 浅析

Comparable和Comparator接口都是用来比较大小的,首先来看一下Comparable的定义: package java.lang; import java.util.*; public interface...compareTo方法不但允许进行简单的等同性进行比较,而且语序执行顺序比较,除此之外,它与Object的equals方法具有相似的特征,它还是一个泛型。...而 Comparator比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。...前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。可以说前者属于 “静态绑定”,而后者可以 “动态绑定”。...我们不难发现:Comparable 相当于 “内部比较器”,而 Comparator 相当于 “外部比较器”。 转载声明:本文转载自「ImportNew」,搜索「importnew」即可关注。

55960

Java中Comparable和Comparator

简介   Comparator比较接口,:如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),那么就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator...也就是说,可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序。...现在假如上面的Person类没有实现Comparable接口,该如何比较大小呢?我们可以新建一个类,让其实现Comparator接口,从而构造一个“比较器"。...而Comparator比较器,若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。   ...用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并且在Comparator 里面用户可以自己实现复杂的可以通用的逻辑

37720

Comparable和Comparator兄弟情深?

Comparable和Comparator乍一看像兄弟俩。但是,虽然长得像,使用上却是有很多区别。...一个只需传一个List参数,另一个需要传两个参数:List和Comparator。 其实,这两种方法就对应了Comparable和Comparator的两种用法。...我经常使用带两个参数的方法,即需要实现Comparator接口。 使用步骤: 1. 定义待比较的实体类。 2. 定义一个比较器,实现Comparator接口。 3. 重写compare方法。...,实现Comparator接口 public class UserCompare implements Comparator { @Override public int compare...Comparator 使用比较灵活,不需要修改实体类源码,但是需要实现一个比较器。 3. Comparable 使用简单,但是对代码有侵入性,需要修改实体类源码。

25911
领券