Comparator,Comparable接口区别

最近在做一个对象排序的功能,需要按不同规则排序.看了Arrays,Collections,的sort方法,

了解了Comparator,Comparable两个接口,找到了适用于自己的排序办法,下面把自己的

理解和收集到的我认为很经典的解释整理如下:

comparable是通用的接口,用户可以实现它来完成自己特定的比较,而comparator可以看成一种算法的实现,在需要容器集合collection需要比较功能的时候,来指定这个比较器,这可以看出一种设计模式,将算法和数据分离,就像C++ STL中的函数对象一样。

前者应该比较固定,和一个具体类相绑定,而后者比较灵活,它可以被用于各个需要比较功能的类使用。可以说前者属于“静态绑定”,而后者可以“动态绑定”。

一个类实现了Camparable接口表明这个类的对象之间是可以相互比较的。如果用数学语言描述的话就是这个类的对象组成的集合中存在一个全序。这样,这个类对象组成的集合就可以使用Sort方法排序了。

而Comparator的作用有两个:

1. 如果类的设计师没有考虑到Compare的问题而没有实现Comparable接口,可以通过 Comparator来实现比较算法进行排序

2. 为了使用不同的排序标准做准备,比如:升序、降序或其他什么序

时间: 2025-01-31 10:10:08

Comparator,Comparable接口区别的相关文章

comparator接口与Comparable接口的区别

Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法. Comparator位于包java.util下,而Comparable位于包   java.lang下 Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 St

浅析Java中comparator接口与Comparable接口的区别_java

Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如

对比Java中的Comparable排序接口和Comparator比较器接口_java

ComparableComparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序". 即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如TreeM

java比较器Comparable接口与Comaprator接口的深入分析_java

java的比较器有两类,分别是Comparable接口和Comparator接口.在为对象数组进行排序时,比较器的作用非常明显,首先来讲解Comparable接口.让需要进行排序的对象实现Comparable接口,重写其中的compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用java.util.Arrays.sort()来排序对象数组,实例如下: 复制代码 代码如下: class Student implements Comparable<Student>{    priv

java-JAVA泛型,Comparable接口的泛型

问题描述 JAVA泛型,Comparable接口的泛型 背景:我现有两个类 一个类是Employee implements Comparable<Employee> 另一个是Manager extends Employee 现在要写函数,在任意数组中找到最大和最小的存入Pair对象中public static <T extends Comparable<T>> Pair<T> minmax(T[] a) { if(a == null || a.length

omparable接口 容器-java基础Comparable接口的问题

问题描述 java基础Comparable接口的问题 import java.util.*; class Student implements Comparable { int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } public String toString() { return id + " " +name ; } public int com

Comparable接口、Set接口、Map接口、list接口及 泛型

comparable接口 实现comparable接口的类,对象之间可以比较大小. comparable接口中只有一个方法     public int compareto(object obj);     该方法:返回 0 表示this == obj             返回正数表示this > obj             返回负数表示this > obj 实现了comparable接口的类通过compareto方法确定对象的排序方式. 可以通过sort()方法排序. 数据结构的选择

sata2和sata3接口区别评测

  使用SATA接口的硬盘又叫串口硬盘,是未来PC机硬盘的趋势.SATA最大的优势是传输速率高.目前主流固态硬盘普遍都已升级为SATA3.0接口,与之对应的主板或者笔记本的SATA接口也已普及3.0规范,而过去一些老的主板或者笔记本还多停留在SATA2.0时代,那么,同样是一颗SATA3.0的固态硬盘,sata2和sata3接口区别是什么呢? sata2和sata3的区别 SATA3.0又称SATA6Gbps,SATA2.0则为SATA3Gbps,SATA3.0是串行ATA国际组织(SATA-I

Java中抽象类和接口区别的个人见解

抽象类 抽象类是用来捕捉子类的通用特性的 .它不能被实例化,只能被用作子类的超类.抽象类是被用来创建继承层级里子类的模板.以JDK中的GenericServlet为例: public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {     // abstract method     abstract void service(ServletRequest req, ServletRe