Java集合02——三分鐘了解你必須掌握的兩個Set

上一篇文章我們說到了 List ,本章開始,我們將繼續(xù)講解Set相關(guān)的知識。關(guān)注公眾號「Java面典」了解更多 Java 知識點(diǎn)。

Set 是一個無重復(fù)對象的集合類。值的重復(fù)與否是根據(jù)對象的 hashCode 來判斷的,如果想要讓兩個不同的對象視為相等的,就必須覆蓋 Object 的 hashCode 方法和 equals 方法。

HashSet

  • HashSet 是無序 的 Set 對象,由 HashMap 實(shí)現(xiàn)的,不保證元素的順序性;
  • HashSet 是非同步的。如果需要使用多線程操作 HashSet ,可以使用Collections.synchronizedSet 方法來“包裝” Set。
Set s = Collections.synchronizedSet(new HashSet(...));
  • 帶集合構(gòu)造參數(shù) 。
public HashSet(Collection<? extends E> c) {
    // (int) (c.size()/.75f) + 1 —— HashMap 的加載因子是 0.75
    // -- 當(dāng)HashMap的“閾值”(閾值=HashMap總的大小*加載因子) < “HashMap實(shí)際大小”時,
    // -- HashMap 容量要翻番。
    // 16 —— HashMap的總的大小,必須是2的指數(shù)倍
    map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16));
    addAll(c);
}

TreeSet

  • TreeSet 是有序的 Set 對象,通過 TreeMap 實(shí)現(xiàn)的,利用二叉樹的原理,保證集合內(nèi)的順序;
  • String 和 Integer 都可以進(jìn)行默認(rèn)的 TreeSet 排序,自定義對象必須實(shí)現(xiàn) Comparable 接口,并且覆寫相應(yīng)的 compareTo()函數(shù),才能進(jìn)行 TreeSet 排序;
  • TreeSet 是非同步的;
  • TreeSet 為基本操作(add、remove 和 contains)提供受保證的 log(n) 時間開銷。

Java集合系列推薦

Java集合01——List 的幾個實(shí)現(xiàn)類,了解一下?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容