Java 集合类(1)--Comparable 和 Comparator的比较

Comparable 是在集合内部定义的方法实现的排序;

Comparator 是在集合外部实现的排序

Comparator位于包java.util下,而Comparable位于包java.lang

Comparable 是一个对象本身就已经支持自比较所需要实现的接口,如 String、Integer 自己就可以完成比较大小操作,已经实现了Comparable接口

Comparator 是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足你的要求时,你可以写一个比较器来完成两个对象之间大小的比较。

用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为

比如:你想对整数采用绝对值大小来排序,Integer 是不符合要求的,你不需要去修改 Integer 类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了 Comparator 接口的对象来实现控制它的排序就行了。

import   java.util.*;
public class AbsComparator implements Comparator {
    public int compare(Object o1, Object o2){
      int v1 = Math.abs(((Integer)o1).intValue());
      int v2 = Math.abs(((Integer)o2).intValue());
      return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1);
    }
}    

调用的时候是这样调用的,或者直接写成匿名内部类

Arrays.sort(integers, new AbsComparator()); 

Comparator定义了俩个方法,分别是int   compare(T   o1,   T   o2)和   boolean   equals(Object   obj),用于比较两个Comparator是否相等,有时在实现Comparator接口时,并没有实现equals方法,可程序并没有报错,原因是实现该接口的类也是Object类的子类,而Object类已经实现了equals方法

Comparable中只有public int compareTo(T o)方法,也就是说假如我定义了一个Person类,这个类实现了Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个   PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator   comparator= new PersonComparator();comparator.compare(person1,person2);

这两种不同调用方式

时间: 2024-10-05 16:27:14

Java 集合类(1)--Comparable 和 Comparator的比较的相关文章

Java 解惑:Comparable 和 Comparator 的区别

读完本文你将了解到: Comparable 自然排序 Comparator 定制排序 总结 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. Comparable 自然排序 Comparable 在 java.lang 包下,是一个接口,内部只有一个方法 compareTo(): public interface Comparable<T> { public int compareTo(T o); } Comparab

Java 排序之 Comparable 与 Comparator

1.Collections.sort() 为何 ClassCastException? 在收集物件之後,對物件進行排序是常用的動作,你不用親自實作排序演算法,java.util.Collections提供有sort()方法,由於必須有索引才能進行排序,因此Collections的sort()方法接受List實作物件.例如: package cc.openhome;   import java.util.*;   public class Sort {     public static void

java集合中Comparable和Comparator辨析

一.Comparable和Comparator简介 在对集合元素进行比较时一般使用TreeSet.对于简单的数据类型,TreeSet可以直接进行比较.但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用Comparable和Comparator. Comparable和Comparator都是用来实现集合中的排序的,只是Comparable是在集合内图定义的方法实现排序,而Comparator是在集合外部实现的排序.所以如果想对结合排序,需要在

Java学习之Comparable与Comparator的区别

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

黑马程序员-JAVA学习之Comparable与Comparator接口

--------android培训.java培训.期待与你交流!-------- public interface Comparator<T> 此接口提供对某个collection集合对象进行强行整体排序的比较函数.可以将 Comparator 传递给 sort() 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现自定义精确控制.还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的co

JAVA比较器:Comparable和Comparator

一.Comparable接口 1.public interface Comparable{ public int compareTo(Object other); } 2.当本对象小于.等于或大于other对象时,相应返回一个小于.等于或大于0的值. 3.若对象不可比较,抛出ClassCastException 4.compareTo()定义的顺序是类的自然顺序,即此排序对类的对象来说是最自然的. 5.equals()定义一种自然相等关系,两个对象相等,返回ture. 6.许多类:String.

Comparable 和Comparator

comparable在java.lang下 comparator在java.util下 Comparable 和Comparator详解及 区别 comparator用法 原文地址:https://www.cnblogs.com/10zhang/p/8940709.html

Comparable与Comparator,java中的排序与比较

1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如string提供了按字母进行比较,int提供了按整数大小进行比较. 2:Comparable与Comparator but,在软件开发的世界中,任何没有代码的堆概念都是耍流氓.所以,无论我们解释的多么完美,必须show me the code: 我们首先看这样一段代码: public class Collect

Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1)Iterator定义有三个方法: ①boolean hasNext()方法:判断指针后面是否有元素. ②E next()方法:指针后移,并返回当前元素.E代表泛型,默认为Object类型. ③void remove()方法:在原集合中删除刚刚返回的元素. 2)对于List集合而言,可以通过基于下标的