分享
 
 
 

java api 接口篇(二)下

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

编写你自己的 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));

}

}

QQRead.com 推出数据恢复指南教程 数据恢复指南教程

数据恢复故障解析

常用数据恢复方案

硬盘数据恢复教程

数据保护方法

数据恢复软件

专业数据恢复服务指南

为了使这个例子短一些,该类受到了一点限制:它不支持中间名,它要求必须同时具有first name 和 last name, 而这不是在全世界都通用的。尽管如此,这个例子仍有几个重要之处:

Name 对象是不变的( immutable)。作为相等、不变类型的所有其它事情就是如何做的问题,非凡是对那些将被用来作为 Sets 中的元素或 Maps

中的键的对象来说,更是如此。假如你对这些 对象集 中的元素或键做了更改,这些 对象集 将中断。

构造函数可检查它的参数是否为 null。 这可以保证所有的Name 对象都能很好地形成。因而没有其它方法会? NullPointerException.

hashCode 方法被重新定义。对重新定义 equals 方法的任意类来说,这是必需的(essential)。 一般约定(general contract)需要

Object.equals. (Equal 对象必须具有相等的哈希代码) 。

假如特定对象为 null,或一个不适当的类型, equals 方法则返回 false。 在这种情况下, compareTo 方法扔出一个运行时异常。这两个行为都是各自方法的一般约定所必需的。

toString 方法已被重新定义,从而可以以人们能够读懂的形式打印 Name 。这总是一个好主意,非凡是对要被放入对象集 中的对象来说,更有益处。各种

对象集 类型的 toString 方法依靠它们的元素、键和值的 toString 方法。

由于这一节介绍的是有关元素排序的问题,因而让我们稍微多谈一点 Name 的 compareTo 方法。它实现标准的姓名-排序算法,在该算法中,last

name 优先于 first name。这恰恰是你在一个natural ordering(自然排序)中所想要的。 假如自然排序不自然,那才轻易引起混乱呢!

请看 compareTo 是如何被实现的,因为它是相当典型的。首先,你将 Object 参数转换为适当类型; 假如参数类型是不适当的,则会扔出一个适当的异常(ClassCastException);那么你应该比较对象的最重要部分(在此案例中为

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有