日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java双等号和equals_JAVA编程基础篇:hashCode的特性和作用

發布時間:2024/1/23 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java双等号和equals_JAVA编程基础篇:hashCode的特性和作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
hashCode作用可以歸結為:加速查找速度

hashCoed 的特性

(1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode經常用于確定對象的存儲地址;

(2)如果兩個對象相同, equals方法一定返回true,并且這兩個對象的HashCode一定相同;

(3)兩個對象的HashCode相同,并不一定表示兩個對象就相同,即equals()不一定為true,只能夠說明這兩個對象在一個散列存儲結構中。

(4)如果對象的equals方法被重寫,那么對象的HashCode也盡量重寫。

equals()方法與 “=="號 的區別

1、超類Object的equals()底層原理:

在超類Object中有一個equals()的基本方法,源碼如下:

public boolean equals(Object obj) { return (this == obj); }

實際上我們知道所有的對象都擁有標識(內存地址)和狀態(數據),同時“==”比較的是兩個對象的內存地址,在Object的equals方法底層調用的是==號,所以說Object的equals()方法是比較兩個對象的內存地址是否相等,如果為true,則表示的引用的是同一個對象。

2、equals()與"==" 的區別:

(1)== 號在比較基本數據類型時比較的是數據的值,而用 == 號比較兩個對象時比較的是兩個對象的地址值;

(2)equals()不能用于基本的數據類型,對于基本的數據類型要用其包裝類。

(3)默認情況下,也就是從Object繼承而來的 equals 方法與 “==” 是完全等價的,比較的都是對象的內存地址,因為底層調用的是 “==” 號,但我們可以重寫equals方法,使其按照我們的需求方式進行比較,如String類重寫equala()方法,使其比較的是字符的內容,而不再是內存地址。

hashCode 的作用

Java中的集合有兩類,一類是List,再有一類是Set。前者集合內的元素是有序的,元素可以重復;后者元素無序,但元素不可重復。 equals方法可用于保證元素不重復,但如果每增加一個元素就檢查一次,若集合中現在已經有1000個元素,那么第1001個元素加入集合時,就要調用1000次equals方法。這顯然會大大降低效率。 于是,Java采用了哈希表的原理。

哈希算法也稱為散列算法,是將數據依特定算法直接指定到一個地址上。這樣一來,當集合要添加新的元素時,先調用這個元素的HashCode方法,就一下子能定位到它應該放置的物理位置上。

(1)如果這個位置上沒有元素,它就可以直接存儲在這個位置上,不用再進行任何比較了;

(2)如果這個位置上已經有元素了,就調用它的equals方法與新元素進行比較,相同的話就不存了;

(3)不相同的話,也就是發生了Hash key相同導致沖突的情況,那么就在這個Hash key的地方產生一個鏈表,將所有產生相同HashCode的對象放到這個單鏈表上去,串在一起。這樣一來實際調用equals方法的次數就大大降低了。

所以hashCode在上面扮演的角色為尋域(尋找某個對象在集合中區域位置)。hashCode可以將集合分成若干個區域,每個對象都可以計算出他們的hash碼,可以將hash碼分組,每個分組對應著某個存儲區域,根據一個對象的hash碼就可以確定該對象所存儲區域,這樣就大大減少查詢匹配元素的數量,提高了查詢效率。

總結

以上是生活随笔為你收集整理的java双等号和equals_JAVA编程基础篇:hashCode的特性和作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。