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