HashCode方法的作用
在HashSet中的元素是不能重復(fù)的兵拢,jvm可以通過(guò)equals方法來(lái)判斷兩個(gè)對(duì)象是否相同,假設(shè)自定義一個(gè)Person類(lèi)里面有10個(gè)成員變量官觅,每調(diào)用一-次equals方法需 要做10次i判斷分別比較這10個(gè)成員變量是否相等摇展,如果想HashSet中存放100個(gè)對(duì)象,那就會(huì)做1000次if判斷瓤球,數(shù)據(jù)量大的話會(huì)嚴(yán)重影響性能融欧。要解決這個(gè)問(wèn)題的話可以這樣做,將一-些特征相似或相近的對(duì)象歸類(lèi)放到一起給他們一個(gè)編號(hào)卦羡,在做equals判斷時(shí),先比較這些編號(hào)噪馏,編號(hào)相同的話再去比較equals,這樣可以減少一些比較次數(shù)。這個(gè)編號(hào)可以通過(guò)HashCode方法獲得绿饵。HashCode方法的作用就是將對(duì)象進(jìn)行分類(lèi)欠肾,然后獲取到編號(hào)值。舉個(gè)例子拟赊,圖書(shū)館里面的書(shū)都是分好類(lèi)的刺桃,想找《java編程思想》這本書(shū),先找到計(jì)算機(jī)類(lèi)的書(shū)架吸祟,然后再去找就行瑟慈,倘若圖書(shū)館里面的書(shū)籍沒(méi)有分類(lèi),那找起來(lái)就如大海撈針屋匕。
如何重寫(xiě)HashCode
HashCode:算法決定了對(duì)象的歸類(lèi)封豪,如果算法編寫(xiě)的不好可能不會(huì)對(duì)性能有所提升。在編寫(xiě)時(shí)最好可以讓對(duì)象均勻的散列開(kāi)炒瘟,這里假設(shè)可以將對(duì)象分為10個(gè)種類(lèi)吹埠,那么每個(gè)種類(lèi)中存放的對(duì)象的數(shù)量最好不要相差太多。
這里以Person類(lèi)為例: