1. 重载equals():java中默认的对象的equals是当指向同一内存地址时才为true;如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法。
2.重载hashCode():只有当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode,原因:就HashMap来说,好比HashMap就是一个大内存块,里面有很多小内存块,小内存块里面是一系列的对象,可以利用hashCode来查找小内存块hashCode%size(小内存块数量),所以当equal相等时,hashCode必须相等,而且如果是object对象,必须重载hashCode和equal方法。
3. 实现接口Comparable:当需要调用sort()之类的函数要用到对象的比较的基本操作时候,就需要对Object的compareTo(Object arg0)进行实现。
4. binarySearch使用注意:由于Arrays.binarySearch(Object array[],Object key)中没有给定查找数组的范围,据我估计可能是0到length-1,因而数组最好是都能填满对象,如果部分为空(数组开的过大)则会出错。而且搜索前要调用sort函数排序一下。因为数组长度和对象个数相同,所以sort(Object [])也不用给定范围而全部排序。
下面是一个简单的例子:
public class TermPOS implements Comparable{ public String term; public String pos; public TermPOS(String a,String b) { term = a; pos = b; } //用于调用Arrays.sort(Object[])时的自定义大小,此时类后加上implements Comparable public int compareTo(Object arg0) { // TODO 自动生成方法存根 if(this.term.compareTo(((TermPOS)arg0).term) != 0) return this.term.compareTo(((TermPOS)arg0).term); return this.pos.compareTo(((TermPOS)arg0).pos); } //当类需要放在HashTable、HashMap、HashSet等等hash结构的集合时才会重载hashCode //http://hi.baidu.com/bluedream348/blog/item/23d10e5466e639d0b645ae92.html public int hashCode() { return term.hashCode()*pos.hashCode(); } //如果你现在需要利用对象里面的值来判断是否相等,则重载equal方法 public boolean equals(Object obj) { if(term.compareTo(((TermPOS)obj).term) != 0)return false; if(pos.compareTo(((TermPOS)obj).pos) != 0)return false; return true; } public static void testHashtable() { Hashtablet = new Hashtable (); TermPOS x = new TermPOS("a","b"); t.put(new TermPOS("a","b"), 2); if(t.get(x) == null)System.out.println("wrong!"); //当去掉hashCode的重写后就输出这个 else System.out.println(t.get(x)); System.out.println(x.equals(new TermPOS("a","b"))); } public static void testSort() { TermPOS tp[] = new TermPOS[3]; tp[0] = new TermPOS("b","c"); tp[1] = new TermPOS("a","c"); tp[2] = new TermPOS("a","b"); Arrays.sort(tp,0,3); for(int i = 0;i < 3;i ++) System.out.println(tp[i].term+"\t"+tp[i].pos); } /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO 自动生成方法存根 testHashtable(); testSort(); } }