展开

关键词

Comparable和Comparator

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

28920

Comparable 与 Comparator 浅析

Comparable和Comparator接口都是用来比较大小的,首先来看一下Comparable的定义: package java.lang; import java.util.*; public interface 若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。 举例(类Person1实现了Comparable接口) package collections; public class Person1 implements Comparable<Person1 实现Comparable接口必须修改自身的类,即在自身类中实现接口中相应的方法。 类实现了Comparable接口,就表明它的实例具有内在的排序关系,为实现Comparable接口的对象数组进行排序就这么简单: Arrays.sort(a); 对存储在集合中的Comparable对象进行搜索

27340
  • 广告
    关闭

    90+款云产品免费体验

    提供包括云服务器,云数据库在内的90+款云计算产品。打造一站式的云产品试用服务,助力开发者和企业零门槛上云。

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

    Java Comparable 与 Comparator

    Paste_Image.png 错误信息是,我们定义的Account无法转换为Comparable类型。 这就需要去实现comparable接口,这是一个形容词,也就是表明,对象是可比较大小的,那自然就可以排序了。 那是因为jdk已经默认帮integer实现了comparable接口。 但问题还是来了,如果我们希望integer的排序方法由大到小呢? 那怎么办,难道我们需要重新去实现integer的comparable接口的comparaTo方法? Paste_Image.png 在Java中,根据顺序有关的行为要么是实现了comparable接口,要么就是实现了comparator接口类型。

    18110

    Comparable和Comparator兄弟情深?

    Comparable和Comparator乍一看像兄弟俩。但是,虽然长得像,使用上却是有很多区别。 其实,这两种方法就对应了Comparable和Comparator的两种用法。我经常使用带两个参数的方法,即需要实现Comparator接口。 使用步骤: 1. 定义待比较的实体类。 2. 二、Comparable 这种方式,需要修改User类,实现Comparable接口,然后重写compareTo方法。 它们出自不同的包,Comparator在 java.util 包下,Comparable在 java.lang 包下。 2. Comparable 使用简单,但是对代码有侵入性,需要修改实体类源码。

    12711

    Comparable和Comparator的区别

    Comparable 定义(只包含一个方法): package java.lang; import java.util.*; public interface Comparable<T> { public 位于包 java.lang下 Comparable & Comparator 都是用来实现集合中元素的比较、排序,区别:Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序 自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,这里的自然顺序就是实现 Comparable接口设定的排序方式。 Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”;而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。

    11330

    Java中Comparable和Comparator

    0x01:Comparable简介   Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序功能。 可以通过让Person实现Comparable接口: public class Person implements Comparable<Person> { private String name 和Comparator区别比较   Comparable是排序接口,若一个类实现了Comparable接口,就意味着“该类支持排序”。 Comparable相当于“内部比较器”,而Comparator相当于“外部比较器”。    两种方法各有优劣, 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是需要修改源代码。

    20320

    Comparable 和 Comparator的理解

    Comparable 的解释 Comparable是一个排序接口 此接口给实现类提供了一个排序的方法,此接口有且只有一个方法 public int compareTo(T o); compareTo 不同于Comparable ,比较器可以任选地允许比较null参数,同时保持要求等价关系。 Comparable 和 Comparator 的对比 1、Comparable 更像是自然排序 2、Comparator 更像是定制排序 同时存在时采用 Comparator(定制排序)的规则进行比较 对于一些普通的数据类型(比如 String, Integer, Double…),它们默认实现了Comparable 接口,实现了 compareTo 方法,我们可以直接使用。 参考: Java 中 Comparable 和 Comparator 比较 https://zhuanlan.zhihu.com/p/24081048 Java 解惑:Comparable 和 Comparator

    31230

    Comparable 与 Comparator 浅析

    Comparable和Comparator接口都是用来比较大小的,首先来看一下Comparable的定义: package java.lang; import java.util.*; public interface 若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。 举例(类Person1实现了Comparable接口) package collections; public class Person1 implements Comparable<Person1 实现Comparable接口必须修改自身的类,即在自身类中实现接口中相应的方法。 类实现了Comparable接口,就表明它的实例具有内在的排序关系,为实现Comparable接口的对象数组进行排序就这么简单: Arrays.sort(a); 对存储在集合中的Comparable对象进行搜索

    33760

    似懂非懂的Comparable与Comparator

    Comparable与Comparator都是用于集合的排序,对于大多数人来说Comparator可能略微比Comparable要熟悉一点,类似下面这几句代码的使用频率应该是最高的。 super T>>”,List集合中的元素需要实现Comparable接口,Comparable接口也是一个泛型,并要求它的泛型类型需要是集合中的元素的超类(或自身)。 重点在于——集合中的元素需要是实现Comparable接口。 这也就是前面提到的Comparable用于集合内部定义的方法实现的排序,Comparator用于集合外部实现的排序。 接着来看Comparable接口和Comparator接口。 接着来看Comparable接口和Comparator接口。

    48441

    Comparator 和 Comparable的区别

    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 会自动对对象进行排序,并不需要 users) { System.out.println(user.getName()); } System.out.println("treeSet====="); //实现了 Comparable

    21920

    Comparable还是Comparator

    首先我想到了一个办法,就是直接实现Comparable接口,再实现接口定义的方法,在方法中完成货物的比较逻辑,虽然这样并不符合“开闭原则”,但我还是这么干了,于是这个类就变成了现在这个样子 public class Goods implements Comparable<Goods> { int num; String s; Date date; public Goods for (int i=low; i<high; i++) for (int j=i; j>low && ((Comparable 结语 实现comparable接口或定义一个比较器都可实现自定义对象的比较,不同的是,comparable需要修改原本的类信息来加入比较的逻辑;而比较器的方式将类本身的定义和类比较的定义进行了分离,耦合性降低了

    20820

    comparable的使用(用于list)

    写一个Person类,继承自Comparable接口,只需重写compareTo(): package ComparableTest; public class Person implements Comparable 利用Comparable实现name排序 Collections.sort(list); print(list,"利用Comparable实现name排序后:"); System.out.print(p.getName()+":"+p.getAge()+" "); } } 输出结果: 原始排序:c:20 A:30 b:10 a:40 利用Comparable @Override public int compareTo(Person o) { return o.name.compareTo(name); } 输出: 利用Comparable

    7030

    Java面试之comparator与comparable

    Comparator 与 Comparable 接口是干什么的? 列出它们的区别 Comparable是一个内比较器,实现Comparable的接口的类有一个特点,就是这些类可以和自己进行比较,至于具体和另一个实现了Comparable接口的类如何比较,则依赖ComparaTo 如果开发者添加进入一个Collection对象想要Collections的sort方法帮助进行排序的话,那么这个对象必须实现Comparable接口,CompareTo方法的返回值是int compareTo 如果该对象小于等于或者大于指定对象,则分别返回负整数、零、正整数 comparator可以被认为是一个外比较器,有两种情况可以使用实现comparator接口的方法: 一个对象不支持自身进行比较(没有实现comparable 接口),但是又想两个对象进行比较 一个对象实现了comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己的理想实现方法 int compare(T o1,T o2),根据第一个参数小于

    53310

    5 分钟搞定 Java Comparable 接口

    在这篇文章中,我们要聊一聊Java Comparable接口。 还有一个不错的视频(https://marcus-biel.com/java-comparable-interface-video-tutorial/)。 Comparable接口时用来干什么的呢? Comparable接口可以帮助我们实现这一目标。Comparable本身不能对对象进行排序,但接口定义的方法 int compareTo(T)可以。 由于我们使用的是compareTo方法,并且正在排序苹果,所以我实现了Comparable接口。在这第一个版本中,我们通过重量比较对象。 使用TreeSet和Tree Map,就更简单了——想要它们会自动排序必须实现Comparable接口的元素。

    25651

    5 分钟搞定 Java Comparable 接口

    Comparable接口时用来干什么的呢? 我们应该如何对事物进行比较和排序?这问题听上去有点莫名其妙,但我希望你认真考虑一下。比方说,我们有一组苹果: ? 例1 我们要怎样对它们进行排序呢? Comparable接口可以帮助我们实现这一目标。Comparable本身不能对对象进行排序,但接口定义的方法 int compareTo(T)可以。 由于我们使用的是compareTo方法,并且正在排序苹果,所以我实现了Comparable接口。在这第一个版本中,我们通过重量比较对象。 Comparable,hashCode以及Equals 你可能会注意到compareTo()看起来有点像hashCode()和equals()方法。但是,它们有一个重要的区别。 使用TreeSet和Tree Map,就更简单了——想要它们会自动排序必须实现Comparable接口的元素。

    32410

    Java 中的 Comparator 和 Comparable

    前言 上一文简单对 Java 中的Comparator 接口进行了说明,今天我们来看看另一个和它非常类似的接口 java.lang.Comparable 。 2. Comparable Comparable 接口同样只有一个抽象方法 int compareTo(T o),其规则和Comparator 的int compare(T o1, T o2)类似。 // 符合语法但是不符合设计意图的操作 Comparable<String> comparable = String::length; 通常情况下Comparable 希望被作为对象的一个特性来表达该对象的实例之间是相互比较的 3.Comparator vs Comparable Comparator 和 Comparable 很相似,但是它们也是有一些不一样的地方的,主要表现在: 视角不同,Comparable 通常是对象自带的比较属性而 总结 总而言之,如果对象的排序需要基于自然顺序(它本身是可比较的),则使用 Comparable,而如果需要根据业务来对不同属性进行排序,请使用 Comparator。

    20810

    Comparable 和 ComparatorComparable 自然排序

    Comparable 自然排序 Comparable 在 java.lang 包下,是一个接口,内部只有一个方法 compareTo(): ? Comparable 可以让实现它的类的对象进行比较,具体的比较规则是按照 compareTo中的规则进行。 Comparable 接口属于 Java 集合框架的一部分。 从上面内容可知使用自然排序需要类实现 Comparable,并且在内部重写 comparaTo 方法。 总结 Java 中的两种排序方式: Comparable 自然排序。(实体类实现) Comparator 是定制排序。

    47470

    Comparable和Comparator的区别

    前面我们已经学习过Comparator和Comparable接口的使用,下面来总结一下二者的区别. 1、Comparator接口位于java.util包下,而Comparable接口位于java.lang :接口,它的方法只有一个对象作为参数,所以要比较的类需要实现Comparable接口,将当前对象与方法参数中的对象进行比较。 因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开,如果使用Comparable接口,那么要比较的类就要实现Comparable:接口才可以 3、关于应用场景 一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable:接口的方式,那么Cat类需要实现Comparable:接口。 如果Ca类通过Comparable:接口的方式实现排序,比如通过name排序了。

    11830

    java中Comparable的例子和用法

    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

    15920

    扫码关注腾讯云开发者

    领取腾讯云代金券