1. 程式人生 > >java中hashCode和equals什麽關系,hashCode到底怎麽用的

java中hashCode和equals什麽關系,hashCode到底怎麽用的

true private ech return 運行 我們 load mark ==

Object類的hashCode的用法:(新手一定要忽略本節,否則會很慘) (視頻下載) (全部書籍)
馬 克-to-win:hashCode方法主要是Sun編寫的一些數據結構比如Hashtable的hash算法中用到。因為hash很快,所以你往 Hashtable裏放東西的時候,他先比一下,裏面有沒有現有的東西的hashCode和你一樣,如果都不一樣,證明是新的,就不再運行equals方 法了,直接放進Hashtable裏了,很快。如果放的時候,Hashtable裏面現有的某東西的hashCode和他一樣,他再運行一下 equals,如不一樣,則證明是新的,可以放入。equals也一樣,證明確實是一樣的,不讓放入Hashtable。另外,Object的hashCode方法(Sun公司編的)是返回對象的內部地址。equals原始方法判斷兩個Object是否a==b,內存地址是否等(

以下摘自sun的文檔:As much as is reasonably practical, the hashCode method defined by class Object does return distinct integers for distinct objects. (This is typically implemented by converting the internal address of the object into an integer, but this implementation technique is not required by the JavaTM
programming language.

最後,補充一點,Sun公司Object的equals方法文檔上指明:for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true). Note that it is generally necessary to override the hashCode method whenever this method is overridden,

so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes. 假如兩個對象的equals返回值一樣,hashcode返回值必須一樣。但是反過來hashcode等,未必equals等,這就是剛才我們說先判斷hashcode是否等,即使等,也要再運行equals,判斷是否真的等。馬克-to-win:從現實看,按照這邏輯編程,是效率最高,最合理的,本文這裏的例子之所以沒按照這條,只是為了說明本文所講的問題。


例2.1.2.1(hashCode都不一樣)---本章源碼import java.util.*;
class CompanyMark_to_win {
private String name;
CompanyMark_to_win(String name) {
this.name = name;
}
。。。。。。。。。。。。。。。。。
詳情請進:http://www.mark-to-win.com/index.html?content=JavaBeginner/javaUrl.html&chapter=JavaBeginner/JavaBeginner3_web.html#hashCode

java中hashCode和equals什麽關系,hashCode到底怎麽用的