ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

java comparator和comparable(1/3)

来源:网络整理     时间:2016-02-24     关键词:

本篇文章主要介绍了"java comparator和comparable",主要涉及到方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 有两种方式可以进行集合排序 :集合中对象的所属类实现了 java.lang.Comparable 接口为集合指定比较器 java.lang.Comparator...

有两种方式可以进行集合排序 :

  1. 集合中对象的所属类实现了 java.lang.Comparable 接口
  2. 为集合指定比较器 java.lang.Comparator 的实现类

1. java.lang.Comparable

public interface Comparable 接口强行对实现它的每个类的对象进行整体排序。 -- 自然排序。类的compareTo称为自然比较方法。

这个接口的作用?
若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。
此外,实现 Comparable 接口的类的对象 可以用作 “有序映射 ( 如 TreeMap)” 中的键或 “有序集合 (TreeSet)” 中的元素,而不需要指定比较器。

如何实现?
利用Comparable接口创建自己的类的排序顺序,只是实现comparaTo方法的问题。
通常就是依赖几个数据成员的自然排序。同时类也应该覆盖equals()和hashCode() 以确保两个相等的对象返回同一个哈希码。

Comparable接口只有一个方法,compareTo(Object obj),定义如下:

publicinterfaceComparable<T> {
    publicintcompareTo(T o);
}

通常需要覆写 compareTo 方法实现排序规则的应用 : int compareTo(Object o): 比较当前实例对象与对象 o ,如果位于对象 o 之前,返回负值,如果两个对象在排序中位置相同,则返回 0 ,如果位于对象 o 后面,则返回正值。

在 Java 2 SDK 版本 1.4 中有24个类实现 Comparable 接口。下表展示了 8 种基本类型的自然排序。虽然一些类共享同一种自然排序,但只有相互可比的类才能排序。

排序
BigDecimal,BigInteger,Byte,Double, Float,Integer,Long,Short
按数字大小排序
Character
按 Unicode 值的数字大小排序
String
按字符串中字符 Unicode 值排序

举个例子:
覆写compareTo : 设计一个有序Person类,实现了Comparable接口, 以年龄为第一关键字,姓名为第二关键字升序排序。

publicintcompareTo(Person person){
       int cop = age - person.getAge();
       if (cop != 0)
           return cop;
       elsereturn name .compareTo(person. name );
    }

再举个例子,设计有序Person类,以id为关键字:
//实现Comparable接口的抽象方法,定义排序规则

publicintcompareTo(Object o){
  Person per = (Person)o;
  returnthis.id - per.id;
}

2. Comparator 比较器接口(策略设计模式)

相关图片

相关文章