奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

java的hash Code的使用方法

時間:2025-04-04 00:25:21 java語言 我要投稿
  • 相關推薦

java的hash Code的使用方法

  首先,想要明白hashCode的作用,你必須要先知道Java中的集合。

  總的來說,Java中的集合(Collection)有兩類,一類是List,再有一類是Set。

  你知道它們的區別嗎?前者集合內的元素是有序的,元素可以重復;后者元素無序,但元素不可重復。

  那么這里就有一個比較嚴重的問題了:要想保證元素不重復,可兩個元素是否重復應該依據什么來判斷呢?

  這就是Object.equals方法了。但是,如果每增加一個元素就檢查一次,那么當元素很多時,后添加到集合中的元素比較的次數就非常多了。

  也就是說,如果集合中現在已經有1000個元素,那么第1001個元素加入集合時,它就要調用1000次equals方法。這顯然會大大降低效率。

  于是,Java采用了哈希表的原理。哈希(Hash)實際上是個人名,由于他提出一哈希算法的概念,所以就以他的名字命名了。

  哈希算法也稱為散列算法,是將數據依特定算法直接指定到一個地址上。如果詳細講解哈希算法,那需要更多的文章篇幅,我在這里就不介紹了。

  初學者可以這樣理解,hashCode方法實際上返回的就是對象存儲的物理地址(實際可能并不是)。

  這樣一來,當集合要添加新的元素時,先調用這個元素的hashCode方法,就一下子能定位到它應該放置的物理位置上。

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

  就調用它的equals方法與新元素進行比較,相同的話就不存了,不相同就散列其它的地址。

  所以這里存在一個沖突解決的問題。這樣一來實際調用equals方法的次數就大大降低了,幾乎只需要一兩次。

  所以,Java對于eqauls方法和hashCode方法是這樣規定的:

  1、如果兩個對象相同,那么它們的hashCode值一定要相同;2、如果兩個對象的hashCode相同,它們并不一定相同 上面說的對象相同指的是用eqauls方法比較。

  你當然可以不按要求去做了,但你會發現,相同的對象可以出現在Set集合中。同時,增加新元素的效率會大大下降。hashcode這個方法是用來鑒定2個對象是否相等的。

  那你會說,不是還有equals這個方法嗎? 不錯,這2個方法都是用來判斷2個對象是否相等的。但是他們是有區別的。

  一般來講,equals這個方法是給用戶調用的,如果你想判斷2個對象是否相等,你可以重寫equals方法,然后在代碼中調用,就可以判斷他們是否相等 了。簡單來講,equals方法主要是用來判斷從表面上看或者從內容上看,2個對象是不是相等。

  舉個例子,有個學生類,屬性只有姓名和性別,那么我們可以 認為只要姓名和性別相等,那么就說這2個對象是相等的。 hashcode方法一般用戶不會去調用,比如在hashmap中,由于key是不可以重復的,他在判斷key是不是重復的時候就判斷了hashcode 這個方法,而且也用到了equals方法。這里不可以重復是說equals和hashcode只要有一個不等就可以了!

  所以簡單來講,hashcode相當于是一個對象的編碼,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比較起來不直觀。我們一般在覆蓋equals的同時也要 覆蓋hashcode,讓他們的邏輯一致。

  舉個例子,還是剛剛的例子,如果姓名和性別相等就算2個對象相等的話,那么hashcode的方法也要返回姓名 的hashcode值加上性別的hashcode值,這樣從邏輯上,他們就一致了。

  要從物理上判斷2個對象是否相等,用==就可以了。

【java的hash Code的使用方法】相關文章:

Java使用方法集錦09-07

Java重載使用方法08-22

Java重載的使用方法09-13

java函數使用方法07-18

java語言super使用方法09-28

Java for循環語句的使用方法10-20

Java語言相關使用方法08-27

java File類的基本使用方法09-15

Java語言Math類的使用方法09-08

主站蜘蛛池模板: 大埔县| 宁海县| 宿松县| 收藏| 荃湾区| 巩义市| 宁安市| 延长县| 静安区| 百色市| 永宁县| 容城县| 长岛县| 广安市| 竹北市| 巨鹿县| 灌云县| 汝州市| 南雄市| 扎囊县| 庆城县| 夏河县| 时尚| 墨竹工卡县| 五大连池市| 铜陵市| 铁力市| 清原| 甘肃省| 蒲城县| 罗平县| 嘉禾县| 汝阳县| 资中县| 土默特右旗| 理塘县| 右玉县| 恩施市| 边坝县| 乌兰浩特市| 茂名市|