HashSet中的元素可相同,怎麼回事? 20

2025-03-21 13:35:07 字數 3735 閱讀 3833

hashset中的元素可相同,怎麼回事?

1樓:匿名使用者

hashset 比較兩個物件是否相同的機制是 2. =

第一步就是比較兩個物件的hash值是否相同(注意這裡的hash值是經過處理的,為了使雜湊更均勻)

hash值相同的就會雜湊到一組 不相同就會雜湊到不同的組(此時就不會再繼續比較脊野了,因為在不同組hashset認為他們就是不同的物件)

第二步 如賣野段果hash值相同 則進行連等判斷 即比較記憶體位址是否相同 如果不相同那麼hashset就認為他們肯定不是相同的對中譽象 如果記憶體位址相等(這一步最主要的目的其實就是刪除元素的時候判斷)那麼進行第三步。

第三步 如果equals返回相同 那麼他們就是徹徹底底的相同的物件 不能新增到set裡,如果返回不同那麼他們就不是徹底的不相同 就可以新增到乙個set裡。

2樓:醉臥丿年華

hset兩次新增的hs1的hashcode值不一樣, hset會根據hashcode值把兩個hs1儲存在hash表不同的位置。

import ;

public class testhashset {

public static void main(string args) {

hashseths1 = new hashset();

hashset> hset = new hashset>()

string");

hs1 hashcode: "

hset前:" hset);

string"知純運);

same");

hs1 hashcode: "

hset後:" hset);

輸出:hs1 hashcode: -891985903

hset前:[[string]]

hs1 hashcode: -888463241

hset後:[[string, same], string, same]]

之所以hset輸出結果中的褲兆第乙個元素和第二個元素好像是一樣的,那是因為hset第一次新增的元素持有hs1的引用,多hs1的修改(新增,刪除)會影響hset第一次新增的元素的值,但第一次新增的元素的hash位置是不會變的。 這裡隱藏乙個問題就是當達到hashset的負載因子時,它會重搭梁新放置元素,這個時候會出現同乙個hash位置放兩個相同的元素,肯定會報錯。建議寫法如下:

import ;

public class testhashset {

public static void main(string args) {

hashseths1 = new hashset();

hashset> hset = new hashset>()

string");

hashset(hs1));

hset前:" hset);

string");

same");

hashset(hs1));

hset後:" hset);

輸出:hset前:[[string]]

hset後:[[string], string, same]]

j**a中,hashset遍歷輸出不會有重複的元素;但是,元素本身是物件的話卻是會出現重複,為什麼?怎麼改?

3樓:網友

重寫物件(employee)的兩個方法:hashcode和equals,因為hashset比較物件是否不同的依據就是這兩個方法,如果你是在eclipse環境裡開發,不用手寫的,右鍵source就有generate的實現。

4樓:悲歌之——殤

上述**輸出相同的值是因為set判斷這兩個物件並不相等,所以需要重寫物件的equals和hashcode方法。

預設的equals方法是用物件的引用來比較的,只有同乙個物件才會相等。

j**a hashset判斷元素重複的問題!

5樓:雪飛瀟瀟

因為你只重寫了equals方法 沒有重寫hashcode方法hashset 判斷元素是否相等 , 首先呼叫hashcode方法,如果hashcode的值一樣, 那麼呼叫equals方法,如果equals方法也一樣, 那麼才算重複元素, 不在新增所以沒有重寫hashcode方法的時候, stu2和stu3的hashcode值不一樣,你就可以新增兩次相同的元素。

修改後的**。

import ;

class student

public string tostring()public int hashcode()public boolean equals(object obj)if (!obj instanceof student))student stu = (student) obj;

boolean b = ;

return b;

public int hashcode()}public class xuexi }測試[2:rose, 1:jack]

hashset集合中允許插入重複的物件嗎?

6樓:匿名使用者

只有乙個,hashset插入資料時,會去判斷的。

hashset可以新增重複元素嗎

7樓:網友

你好,首先要明白一點:加入set裡面的元素必須定義equals()方法以確保物件的唯一性。 第乙個問題:

treeset的底層實現是採用紅-黑樹的資料結構,採用這種結構可以從set中獲取有序的序列,但是前提條件是:

8樓:愛力玖持久延遲

只有乙個,hashset插入資料時,會去判斷的。

hashset不是不能新增相同的元素嗎

9樓:秋殤di冬寒

1、目的很明確,中臘冊測試set中不可新增重複元素。 測試案例1: set的乙個賣巨集的範型物件:

set1, (1) ");"one");輸出一下就可以了,結果局梁得1,很明顯是集合中只有乙個元素。

10樓:百勝學院

只有乙個,hashset插入資料時,會去判斷的。

關於j**a中hashset的add與remove。 當我add兩次重複的元素"123"

11樓:網友

1問號,刪除了。

2問號,不出現了。

jdk 測試過。

new ;命令列輸出。

12樓:網友

set是不允許有重複的,當你重複新增的時候只會有乙個存在,所以你刪了就沒有了。

聽說j**a中set集合中的元素是不可以重複的,但是我寫的這個**裡面又重複了,求大神們釋疑!。。。

13樓:在晴天的雨傘

set 的equals是內容相等.

如果沒有重寫過的equals就是hashcode值相等,可以理解為位址.

重寫過的,就要看對應的equals方法的說明了,根據實際用途來做,一般都是跟內容有關。

14樓:調和若

要去重複 請改寫equals方法。

j**a中從hashset中取元素

15樓:

用強制型別轉換就行了。 iterator it = ; edge = (edge);

怎么判斷氧化還原反應中哪些元素髮生了變價

比如你說的問題 2na2o2 2h2o 4naoh o2 這其中過氧化鈉中氧的化合價為負一,水中氧的化合價為負二。氫氧化鈉中氧的化合價為負2。假設水中氧變氧氣那就是 2到0化合價升高,氧化還原中有升要有降 不考慮特例 這你應知道,0.價 1到0,1到 2 2 1 0 水中 2不變 這就是本題化合價不...

元素週期表中第七主族元素的所有元素的物理性質和化學性質是什麼

首先副族元素都是金屬,有金屬性,導電,導熱.主族 由短週期元素和長週期元素共同內構成的族叫做容主族。表示方法為 第一主族 a 第二主族 a 等等。主族序數 最外層電子數 最高正價 8 負化合價 副族 完全由長週期元素構成的族叫做副族,表示方法為 第一副族 b 第二主族 b 等等。0族 稀有氣體元素化...

被戰鬥破壞的元素英雄融合怪獸,可以用英雄都市復活嗎?

不能,e融合怪只能用融合召喚來特殊召喚,不能用其他方法特殊召喚。不是由戰鬥破壞的怪獸在墓地中能靠卡片效果復活嗎?拜託各位大神 那要看什麼卡片效果的啊。一般從墓地中復活怪獸的卡片都只要求怪獸在墓地裡就可以了,當然,有的有特定召喚條件不能隨便特殊召喚的怪獸就不行。例如同調怪獸,元素英雄的融合怪獸 如果是...