您的位置:软件 > 开发者网络 > 开发工具 > Java > 正文
深入理解Collections API
[文章信息]
作者:不详
时间:2003-06-06
出处:JAVA中文站
责任编辑:方舟
[文章导读]
如果这个 list 由 String 元素所组成, 那么它将按词典排序法(按字母顺序)进行排序.....
advertisement
热点推荐
· 11.15软件精选 制作MSI文件
· 闪客五周年之闪客光荣榜
· 用Winamp“品尝”无限音乐
· 网络加、解密的技术应用
· 闪客五周年之闪客光荣榜:zoron
[正文]

1 2  下一页

  一个 List l 可能被做如下排序:

  Collections.sort(l);

  如果这个 list 由 String 元素所组成, 那么它将按词典排序法(按字母顺序)进行排序; 如果它是由 Date 元素所组成, 那么它将按年代顺序来排序。 Java 怎么会知道该怎么做呢? 这一定是个魔术! 其实不然。实际上, String 和 Date 均实现了Comparable接口。 Comparable 接口为一个类提供一个 自然排序( natural ordering), 它允许那个类的对象被自动排序。下表列出了实现了Comparable 的JDK类:

  类 自然排序

  Byte 带符号的数字排序

  Character 不带符号的数字排序

  Long 带符号的数字排序

  Integer 带符号的数字排序

  Short 带符号的数字排序

  Double 带符号的数字排序

  Float 带符号的数字排序

  BigInteger 带符号的数字排序

  BigDecimal 带符号的数字排序

  File 依赖系统的按路径名字母顺序排序

  String 按字母顺序排序

  Date 按年代顺序排序

  CollationKey 特定字符集按字母顺序排序

  如果你要为一个其元素没有实现 Comparable的列表排序,Collections.sort(list) 将扔出一个 ClassCastException。类似的,如果你要为一个其元素没有作相互比较的列表进行排序, Collections.sort 将扔出一个 ClassCastException. 能够被相互比较的元素被称作 mutually comparable(可相互比较的)。 虽然不同类型的元素有可能被相互比较,但以上列出的任何JDK类型都不允许在类之间的比较 (inter-class comparison)。

  如果你只是要为可比较的元素的列表进行排序,或为它们创建排序的对象集, 则这就是你实际需要了解的全部有关 Comparable 接口的内容。如果你要实现你自己的 Comparable 类型,则下一节将会引起你的兴趣。

  编写你自己的 Comparable 类型

  Comparable 接口由一个单一的方法构成:

  public interface Comparable {

  public int compareTo(Object o);

  }

  compareTo 方法将接收对象与特定对象进行比较,并在接收对象小于、等于或大于特定对象时分别返回负整数、空或一个正整数。如果特定对象不能与接收对象相比较,该方法扔出一个ClassCastException. 这是一个表示某人姓名的类(a class representing a person′s name), 它实现了 Comparable:

import java.util.*;

public class Name implements Comparable {

private String firstName, lastName;

public Name(String firstName, String lastName) {

if (firstName==null || lastName==null)

throw new NullPointerException();

this.firstName = firstName;

this.lastName = lastName;

}

public String firstName() {return firstName;}

public String lastName() {return lastName;}

public boolean equals(Object o) {

if (!(o instanceof Name))

return false;

Name n = (Name)o;

return n.firstName.equals(firstName) &&

n.lastName.equals(lastName);

}

public int hashCode() {

return 31*firstName.hashCode() + lastName.hashCode();

}

public String toString() {return firstName + " " + lastName;}

public int compareTo(Object o) {

Name n = (Name)o;

int lastCmp = lastName.compareTo(n.lastName);

return (lastCmp!=0 ? lastCmp :

firstName.compareTo(n.firstName));

}

}


1 2  下一页

·"WAP天极之IT新闻资讯,50万元等你拿"    ·天极WAP之游戏狂图,50万元等你下载


发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容阅读排行榜
  • 优化JAVA性能的几种方法
  • Java技术实现数据库应用系统慨述
  • Java声音技术详解
  • 对《Java与模式》中工厂方法模式的异议
  • 从重构的角度学习bridge设计模式
  • Java对等计算实践:基于 IP 多播的发现
  • Java中finalize()的另类用法
  • Java Application启动画面的制作
  • Servlet中如何捕获Session事件?
  • Java图形用户界面设计
  • 浅谈Java的输入输出流
  • 用Socket类实现HTTP协议客户端应用
  • 11.15软件精选 制作MSI文件
  • 闪客五周年之闪客光荣榜
  • 兰欣推出我国第一款网络游戏专用音箱
  • 玩家发现117亡灵种族Bug
  • [配置推荐]极品HIFI配置
  • 东瀛美少女COSPLAY(55)
  • 用Winamp“品尝”无限音乐
  • 迷你型PStwo全面透析专题
  • Advertisement

    天极无线
    待机彩图    >>更多
    多彩动画    >>更多
    美妙和弦    >>更多
    天使在唱歌
    壁虎漫步
    PrettyBoy
    LoveLoveLove
    我是你的小小狗
    单身情歌
    十面埋伏
    祝酒歌
    回心转意
    波斯猫
    太委屈
    S.H.E
    潘玮柏
    M2M
    蔡依林
    阿牛
    林志炫
    陈弈迅
    刀郎
    黑龙
    S.H.E
    陶晶莹
    情人玫瑰坊
    音乐风云
    新片速递
    神秘测试
    都市约会
    ·天极彩信天天精彩
    ·图铃梦工厂下载无限!
    ·找寻童真,卡通专题
    ·夏日激情交友社区!
    ·星座运程,预测人生

    CSEEK搜索