快速业务通道

Java:比较与排序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18

Java:比较与排序

时间:2011-02-25 zhangjunhd

1.两种比较接口分析

在“集合框架”中有两种比较接口:Comparable接口和Comparator接口。Comparable是通用的接口,用户可以实现它来完成自己特定的比较,而Comparator可以看成一种算法的实现,在需要容器集合实现比较功能的时候,来指定这个比较器,这可以看成一种设计模式,将算法和数据分离。

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

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

而Comparator的作用有两个:

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

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

2 Comparable接口

public interface Comparable<T> {   public int compareTo(T o); }

java.lang. Comparable接口定义类的自然顺序,实现该接口的类就可以按这种方式排序。

1)int compareTo(Object o): 比较当前实例对象与对象o,如果位于对象o之前,返回负值,如果两个对象在排序中位置相同,则返回0,如果位于对象o后面,则返回正值。

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

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

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

这个接口的作用:如果数组或者集合中的(类)元素实现了该接口的话,我们就可以调用Collections.sort和Arrays.sort排序,或应用于有序集合TreeSet和TreeMap中。

下面设计一个有序的类Person,它实现Comparable接口,以年龄为第一关键字,姓名为第二关键字升序排序。

Person.java

package com.zj.sort.comparable; public class Person implements Comparable<Person> {   private int age;   private String name;   public Person(int age, String name) {     this.age = age;     this.name = name;   }   public int compareTo(Person person) {     int cop = age - person.getAge();     if (cop != 0)       return cop;     else       return name.compareTo(person.name);   }   public int getAge() {     return age;   }   public String getName() {     return name;   }   public int hashCode() {     int result = 17;     result = 37 * result + age;     result = 37 * result + name.hashCode();     return result;   }   public boolean equals(Object o) {     if (!(o instanceof Person))       return false;     Person person = (Person) o;     return (age == person.age) && (name.equals(person.name));   }   public String toString()

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号