hashset去重原理_Java之HashSet,Linkedset常用功能以及介绍
HashSet
Set的子類
固然 其有無序 不會有重復(fù)值的功能
說到這 為什么HashSet中不會有重復(fù)的元素呢?
首先對于java自帶的數(shù)據(jù)類型而言(像String Integer 等) java自身就已經(jīng)重寫了里面的叛變方法
然而對于 自定義的數(shù)據(jù)類型(也就是自定義的類而言呢)如果不關(guān)心其底層方法如何實現(xiàn)的話
那么將會喪失HashSet中獨(dú)有的排除重復(fù)值的功能
那么怎么樣去解決自定義類排除重復(fù)值的功能 其實很簡單
重寫自定義類中的hashCode 和euqals方法就行
由于都明白 HashSet的底層是由哈希算法實現(xiàn)的 通過哈希算法每個對象將會返回一個int值
至于怎么算我就不說了。 通過這個int值 就相當(dāng)于給每個創(chuàng)建的對象一個編號 如果不重寫這個int值的話 那么每個對象都會獲得不同的編號 而不會比較其內(nèi)容 所以自然而然 HashSet的去重方法也就沒有了 因此需要更改這個int值 然后當(dāng)對象創(chuàng)建出來的時候(如果是相同的對象就是同一個int值 那么再去比較equals方法 來判斷其屬性(內(nèi)容))
當(dāng)然友好的eclipse為我們提供了重寫HashCode和equals的方法(快捷鍵操作 ctrl+alt+s+h) 這樣方便許多
盡管這樣 但是對于其原理的理解依然要熟記于心
LinkedHashSet 是HashSet的子類
底層鏈表實現(xiàn) 功能就是 怎么存怎么取(FIFO) 按照存儲的順序 去取元素
存a,b,c,d 取 a,b,c,d 因此效率比HashSet低一些
實現(xiàn)自定義類去重功能的代碼
import java.util.HashSet;import com.heiam.bean.Person;public class Demo1_HashSet {/** * @param args * Set集合,無索引,不可以重復(fù),無序(存取不一致) */public static void main(String[] args) {//demo1();HashSet hs = new HashSet<>();hs.add(new Person("張三總結(jié)
以上是生活随笔為你收集整理的hashset去重原理_Java之HashSet,Linkedset常用功能以及介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建设银行卡密码输错3次怎么办
- 下一篇: java byte char io流_吃