标签:title 数据 contain rgs 目的 oid 设计 round test
Object的hashCode()方法生成散列码,它默认使用的是对象的地址计算散列码。因此在使用散列的数据结构(HashSet,HashMap,LinkedHashMap和LikedHashSet),必须为你的键(自己编写的类)覆盖hashCode()和equals()方法(因为equals()方法也是Object的一部分)。
默认的 Object.equals()只是比较对象的地址,若要使用自己的类作为HashMap的键必须重载hashCode()和equals()方法。
使用散列的目的在于:想要使用一个对象来查找另一个对象。
设计hashCode最重要的因素就是:无论何时,对同一个对象调用hashCode()都应该生成同样的值。
以String为例:
public class TestStringhashCode {
public static void main(String [] args){
String []hellos = "hello hello".split(" ");
System.out.println( hellos[0].hashCode());
System.out.println(hellos[1].hashCode());
String a = new String("hello");
System.out.println(a.hashCode());
String b = new String("hello");
System.out.println(b.hashCode());
}
}
String类中有多个String对象,都包含相同的字符串序列,那么这些String对象都映射到同一块内存区域。所以new String("hello")生成的几个实例虽然是相互独立的,但是对他们使用hashCode应该生成相同的结果。
对于String而言,hashCode()是基于String内容生成的。
标签:title 数据 contain rgs 目的 oid 设计 round test
原文地址:http://www.cnblogs.com/0427mybirthday/p/7668904.html