HashSet中為什麼不允許放重複的值

2021-05-24 05:01:26 字數 470 閱讀 4273

主要是因為hahcode()

hashcode()方法的作用: 雜湊演算法,將集合分成若干個區域,每個物件在放入集合之前由計算

機計算出乙個哈吸碼,可以將雜湊碼分組,每組分別對應某個區域,根據乙個物件的雜湊碼可以

確定該物件應儲存在哪個區域。當再次向雜湊表中存入物件的時候,依舊這樣兒運算,但可以快

速的判斷裡面是否有與現在要存的物件相同的,如果有則不能對此物件進行儲存

注意:當乙個物件被儲存進hashset集合中以後,就不能修改這個物件中的那些參 與 計算哈

希值 的字段了,否則,物件修改後的雜湊值與最初儲存進hashset集合中時的雜湊值就不同了,

在這種情況下即使使在contains方法使用該物件的當前引用作為的引數去hashset集合中檢索對

象,也將返回找不到物件的結果,這也會導致無法從hashset集合中單獨刪除當前物件,從而造

成   記憶體洩漏

Set中的元素為什麼不允許重複

為了弄清楚這個問題 我又看了一遍 collection 部分 並且看了些其中的原始碼 覺得對其中的實現又明白了一點 現在說出來和大家共享 我們先看一下 set 類的關係圖 現在我們就從 set 說起。set 介面為我們提供了乙個 add 方法,以讓我們新增元素。所以我們看一下在其實現類 hashse...

為什麼虛構函式不允許丟擲異常

第乙個原因 session session session session 設想如果在析構函式的logdestruction函式中丟擲異常,那麼 endtransaction就不會被呼叫,因為異常發生之後異常點 即logdestruction 之後的語句塊不會被執行。因此會產生資源洩漏。解決方法如下...

Android系統為什麼不允許在子執行緒中訪問UI

這是因為android的ui控制項並不是執行緒安全的,如果多執行緒中併發訪問可能導致ui控制項處於不可預期的狀態.那為什麼系統不對ui控制項的訪問加上鎖機制呢?缺點有兩個 首先,加上鎖機制會讓ui訪問的邏輯變得複雜 其次鎖機制會降低ui訪問的效率,因為鎖機制會阻塞某些執行緒的執行.鑑於這兩個缺點,最...