网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.破除java神话之二:参数是传址的.
.Configuring high-speed dialup.
.java关于日期的运算等处理方法.
.JAVA数据对象上机实践.
.Java软件开发学习笔记(三).
.Sun推新虚拟磁盘存储系统 容量提.
.类的基本概念.
.Java桌面应用程序设计:SWT简介.
.用cos进行文件上传.
.通过JDMK 进行遗留系统管理.
.decodeURI 方法.
.java中传值和传址及其引伸深度克.
.关于创建 Java .exe 文件的几种方.
.让你的应用程序随Java流而动.
.我对类,方法,接口的认识.
.优化Java Applet的加载过程.
.一个简单的访问数据库的应用程序.
.如何用servlet打开非HTML格式的文.
.Swing 中设置模态窗体和启动位置.
.Struts 和 Tiles 辅助基于组件的.

java api 接口篇(二)下

发表日期:2008-1-5


编写你自己的 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);那么你应该比较对象的最重要部分(在此案例中为
上一篇:Java中通过代理服务器(proxy)访问网络 人气:766
下一篇:Java多线程及其同步实现原理 人气:1087
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐