摘要:繼承自,繼承接口,接口繼承自。的也是使用的的的。中和方法理論上是常數(shù)時(shí)間的復(fù)雜度,前提是元素在中分散比較均勻。并且這些元素在結(jié)構(gòu)中,根據(jù)進(jìn)行了排序,所以用遍歷時(shí)可以按照遞增遞減順序。遍歷訪問(wèn)元素的操作比更為高效,時(shí)間由元素?cái)?shù)量決定。
java.util.Set
HashSet繼承自AbstractSet,繼承接口Set,Set接口繼承自Collection。
null是否可以放在Set中null可以放在Set中,并且最多只能有一個(gè)。null的hashcode是0。
HashSet用什么結(jié)構(gòu)實(shí)現(xiàn)的HashSet用了一個(gè)HashMap。。。該HashMap默認(rèn)的負(fù)載因子是0.75。
需要存入的對(duì)象作為HashMap的key存入,而value使用了一個(gè)公共靜態(tài)的ObjectPRESENT來(lái)填充。
HashSet的iterator也是使用的HashMap的key set的iterator。
HashSet中add、remove和contains方法理論上是常數(shù)時(shí)間的復(fù)雜度,前提是元素在bucket中分散比較均勻。迭代訪問(wèn)其中元素的時(shí)間,則是元素?cái)?shù)量+bucket容量,所以在迭代訪問(wèn)操作比較重要時(shí),不要將set的容量初始為很大。
HashSet不是線程安全的將其變?yōu)橐粋€(gè)線程安全set的官方方法是:
Set s = Collections.synchronizedSet(new HashSet(...)TreeSet是用什么結(jié)構(gòu)實(shí)現(xiàn)的
不出所料,是用TreeMap實(shí)現(xiàn)的。并且這些元素在結(jié)構(gòu)中,根據(jù)comparator進(jìn)行了排序,所以用iterator遍歷時(shí)可以按照遞增、遞減順序。
comparator在TreeSet中是比較關(guān)鍵的,這些元素要么是comparable,要么自己提供一個(gè)定制的comparator。并且comparator的實(shí)現(xiàn)一定要和equals方法一致。
對(duì)于add、remove和contains方法,理論上是log(n)時(shí)間復(fù)雜度。
LinkedHashSet與HashSet的區(qū)別LinkedHashSet繼承自HashSet,但是記錄了元素的插入順序,仍然具有原來(lái)HashSet常數(shù)時(shí)間復(fù)雜度操作的優(yōu)勢(shì),但是這些操作會(huì)比原來(lái)慢一些,用來(lái)維護(hù)這個(gè)順序。遍歷訪問(wèn)元素的操作比HashSet更為高效,時(shí)間由元素?cái)?shù)量決定。
一樣,LinkedHashSet用LinkedHashMap來(lái)實(shí)現(xiàn)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67868.html
摘要:說(shuō)到復(fù)盤基礎(chǔ),并不是所有的都會(huì)復(fù)盤,沒(méi)那個(gè)時(shí)間更沒(méi)那個(gè)必要。比如,一些基礎(chǔ)的語(yǔ)法以及條件語(yǔ)句,極度簡(jiǎn)單。思前想后,我覺得整個(gè)計(jì)劃應(yīng)該從集合開始,而復(fù)盤的方式就是讀源碼。通常,隊(duì)列不允許隨機(jī)訪問(wèn)隊(duì)列中的元素。 ?showImg(https://segmentfault.com/img/remote/1460000020029737?w=1080&h=711); 老讀者都知道,我是自學(xué)轉(zhuǎn)行...
摘要:集合類關(guān)系是和的父接口。相等必須是對(duì)稱的,約定只能和其它相等,亦然。和接口在中引入,這個(gè)單詞是和的合成,用來(lái)分割集合以給并行處理提供方便。這些并不立即執(zhí)行,而是等到最后一個(gè)函數(shù),統(tǒng)一執(zhí)行。 集合類關(guān)系: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ...
摘要:在中引入該方法,用來(lái)替換中的每個(gè)元素。的方法,只能在或之后使用,也就是確保當(dāng)前指向了一個(gè)存在的項(xiàng)。這里使用了,該方法可以將非對(duì)象先映射為型,然后進(jìn)行比較。存儲(chǔ)的是有序的數(shù)組,所以劃分時(shí)會(huì)按照順序進(jìn)行劃分。 java.util.List replaceAll 在Java8中引入該方法,用來(lái)替換list中的每個(gè)元素。 default void replaceAll(UnaryOpe...
摘要:一名年工作經(jīng)驗(yàn)的程序員應(yīng)該具備的技能,這可能是程序員們比較關(guān)心的內(nèi)容。數(shù)據(jù)結(jié)構(gòu)和算法分析數(shù)據(jù)結(jié)構(gòu)和算法分析,對(duì)于一名程序員來(lái)說(shuō),會(huì)比不會(huì)好而且在工作中能派上用場(chǎng)。 一名3年工作經(jīng)驗(yàn)的Java程序員應(yīng)該具備的技能,這可能是Java程序員們比較關(guān)心的內(nèi)容。我這里要說(shuō)明一下,以下列舉的內(nèi)容不是都要會(huì)的東西—-但是如果你掌握得越多,最終能得到的評(píng)價(jià)、拿到的薪水勢(shì)必也越高。 1、基本語(yǔ)法 這包括...
摘要:容器的類圖如下圖所示接口定義了存取一組對(duì)象的方法其子接口和分別定義了存儲(chǔ)方式。中的數(shù)據(jù)對(duì)象沒(méi)有順序且不可以重復(fù)。注意相等的對(duì)象應(yīng)該具有相等的 Chap 6 常用類 focus on : 字符串相關(guān)類 (String, StringBuffer) 基本數(shù)據(jù)類型包裝類 Math類 File類 枚舉類 6.1 字符串相關(guān)類 String 類 -- java.lang.String 類...
閱讀 3283·2023-04-25 18:03
閱讀 1147·2021-11-15 11:38
閱讀 5544·2021-10-25 09:45
閱讀 844·2021-09-24 09:48
閱讀 2297·2021-09-22 15:34
閱讀 1741·2019-08-30 15:44
閱讀 2682·2019-08-30 13:12
閱讀 607·2019-08-29 16:05