国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java中TreeSet的基本介紹,細節(jié)討論,使用注意事項,常用方法,底層源碼分析

這篇具有很好參考價值的文章主要介紹了Java中TreeSet的基本介紹,細節(jié)討論,使用注意事項,常用方法,底層源碼分析。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

TreeSet 是 Java 中的一個有序集合實現(xiàn),它基于紅黑樹數(shù)據(jù)結(jié)構(gòu)來存儲元素,可以保持元素的自然順序(默認情況下升序)或者根據(jù)自定義比較器來進行排序。下面是關(guān)于 TreeSet 的基本介紹、細節(jié)討論、使用注意事項、常用方法以及一些底層實現(xiàn)細節(jié)。

基本介紹:

  • TreeSetSet 接口的實現(xiàn)類,它實現(xiàn)了一個有序的、無重復元素的集合。
  • TreeSet 中的元素是按照其自然順序或者比較器的順序進行排序的
  • TreeSet 不允許存儲重復的元素,每個元素在集合中只能出現(xiàn)一次。

細節(jié)討論:

  • TreeSet 會根據(jù)元素的自然順序或者自定義的比較器來進行排序。如果元素沒有實現(xiàn) Comparable 接口并且沒有提供比較器,會在運行時拋出 ClassCastException。
  • 添加、刪除和查找操作的時間復雜度平均為 O(log n),其中 n 是集合的大小。
  • TreeSet 不是線程安全的,如果在多線程環(huán)境下使用,需要進行適當?shù)耐娇刂啤?/li>

使用注意事項:

  • 在使用 TreeSet 時,元素需要具有可比較性(可以用instanceOf作為防護機制),要么實現(xiàn) Comparable 接口,要么在構(gòu)造 TreeSet 時提供一個比較器。
  • 自然順序是指元素的默認順序,如數(shù)字的升序、字符串的字典序等。如果需要不同的順序,可以通過比較器來實現(xiàn)。

常用方法:

  • add(E e): 向集合中添加一個元素。
  • remove(Object o): 從集合中移除指定的元素。
  • contains(Object o): 判斷集合是否包含指定的元素。
  • isEmpty(): 判斷集合是否為空。
  • size(): 返回集合中元素的數(shù)量。
  • clear(): 清空集合中的所有元素。

底層源碼和底層實現(xiàn):

  • TreeSet 的底層基于紅黑樹(Red-Black Tree)數(shù)據(jù)結(jié)構(gòu)來存儲元素。紅黑樹是一種自平衡的二叉查找樹,確保樹的高度始終保持在一個相對較小的范圍內(nèi),從而保證了添加、刪除和查找操作的高效性能。
  • 紅黑樹的特性使得元素在樹中按照順序排列,從而實現(xiàn)了 TreeSet 的有序性。
  • 通過自平衡的操作,紅黑樹能夠在插入和刪除元素時自動進行樹的重新平衡,從而保持樹的結(jié)構(gòu)穩(wěn)定。

總之,TreeSet 提供了一個有序的集合實現(xiàn),通過底層的紅黑樹數(shù)據(jù)結(jié)構(gòu)實現(xiàn)了高效的元素存儲、添加、刪除和查找操作。在需要保持順序的集合場景下,可以使用 TreeSet

TreeSet的底層代碼分析:文章來源地址http://www.zghlxwxcb.cn/news/detail-677661.html

public class TreeSet_ {
    public static void main(String[] args) {
        //1. 當我們使用無參構(gòu)造器,創(chuàng)建 TreeSet 時,仍然是無序的(存進去的和取出來的順序不一樣),但是取出來的順序是按自然順序排序的(自然順序是指元素的默認順序,如數(shù)字的升序、字符串的字典序等)
        //2. 如果需要不同的順序,可以通過比較器來實現(xiàn)。如:希望添加的元素,按照字符串的長度來排序
        //3. 使用 TreeSet 提供的一個構(gòu)造器,可以傳入一個比較器(匿名內(nèi)部類)
        // 并指定排序規(guī)則
        //簡單看看源碼
        /*
        1. 構(gòu)造器把傳入的比較器對象,賦給了 TreeSet 的底層的 TreeMap 的屬性 this.comparator
        public TreeMap(Comparator < ? super K > comparator) {
            this.comparator = comparator;
        }
        2. 在 調(diào)用 treeSet.add("tom"), 在底層會執(zhí)行到
        if (cpr != null) {//cpr 就是我們的匿名內(nèi)部類(對象)
            do {
                parent = t;
                //動態(tài)綁定到我們的匿名內(nèi)部類(對象)compare
                cmp = cpr.compare(key, t.key);
                if (cmp < 0)
                    t = t.left;
                else if (cmp > 0)
                    t = t.right;
                else //如果相等,即返回 0,這個 Key 就沒有加入
                    return t.setValue(value);
            } while (t != null);
        }
        */
//         TreeSet treeSet = new TreeSet();//默認自然排序
        TreeSet treeSet = new TreeSet(new Comparator() {//自定義排序
            @Override
            public int compare(Object o1, Object o2) {
                //下面 調(diào)用 String 的 compareTo 方法進行字符串大小比較
                //讓加入的元素,按照長度大小排序
                //return ((String) o2).compareTo((String) o1);
                return ((String) o1).length() - ((String) o2).length();
            }
        });
        //添加數(shù)據(jù). treeSet.add("jack");

        treeSet.add("ret");//3
        treeSet.add("ret1");
        treeSet.add("a");
        treeSet.add("abc");//3此時這個加不進去,因為此時是按字符串的長度來排序的,長度和tom相同都為3,但若是在自然排序下是可以插入進去的,因為默認的情況下是比較的兩個字符串是否一樣而不是比較的長度
        System.out.println("treeSet=" + treeSet);
    }
}

到了這里,關(guān)于Java中TreeSet的基本介紹,細節(jié)討論,使用注意事項,常用方法,底層源碼分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RabbitMQ基本使用及企業(yè)開發(fā)中注意事項

    RabbitMQ基本使用及企業(yè)開發(fā)中注意事項

    目錄 一、基本使用 二、使用注意事項 1. 生產(chǎn)者重連機制 - 保證mq服務(wù)是通的 2. 生產(chǎn)者確認機制 - 回調(diào)機制 3. MQ的可靠性 4. Lazy Queue模式 5. 消費者確認機制 部署完RabbitMQ有兩種使用方式: 網(wǎng)頁客戶端 Java代碼 MQ組成部分: 虛擬主機 - 進行數(shù)據(jù)隔離的,好比mysql中的不同數(shù)據(jù)庫

    2024年04月26日
    瀏覽(26)
  • flink中checkpoint重點介紹及生產(chǎn)上使用注意事項

    1、介紹 Flink Checkpoint 是 Apache Flink 提供的一種容錯機制,用于保證在系統(tǒng)故障時數(shù)據(jù)的一致性和可靠性。 2、Flink Checkpoint內(nèi)容拆分 Checkpoint 是什么? Checkpoint 是將應(yīng)用程序中的狀態(tài)信息(包括操作符狀態(tài)、鍵值狀態(tài)等)定期保存到持久化存儲介質(zhì)中的過程。它可以將整個應(yīng)用

    2024年02月13日
    瀏覽(12)
  • 【08】STM32·HAL庫開發(fā)-HAL庫介紹 | STM32Cube固件庫介紹 | HAL庫框架結(jié)構(gòu) | 如何使用HAL庫及使用注意事項

    【08】STM32·HAL庫開發(fā)-HAL庫介紹 | STM32Cube固件庫介紹 | HAL庫框架結(jié)構(gòu) | 如何使用HAL庫及使用注意事項

    ??CMSIS (微控制器 軟件接口標準 ):Cortex Microcontroller Software Interface Standard,是由ARM和與其合作的芯片廠商( 比如ST、NXP公司等 )、軟件工具廠商( Keil、IAR公司等 ),共同制定的標準。 如果沒有此標準,ARM公司的產(chǎn)品兼容性非常差。 ??下圖中分為三層,第一層是用戶層

    2024年02月11日
    瀏覽(24)
  • 【TreeSet】| 深度剝析Java SE 源碼合集Ⅳ

    【TreeSet】| 深度剝析Java SE 源碼合集Ⅳ

    TreeSet是基于紅黑樹實現(xiàn)的Set集合,它具有以下特點: 有序性:TreeSet是有序的,它按照元素的自然排序進行排序,或者按照指定的Comparator進行排序。 不允許重復元素:與HashSet一樣,TreeSet也不允許重復元素,如果試圖將一個已經(jīng)存在的元素添加到TreeSet中,那么添加操作將會

    2023年04月17日
    瀏覽(20)
  • 49天精通Java,第24天,Java鏈表、散列表、HashSet、TreeSet

    49天精通Java,第24天,Java鏈表、散列表、HashSet、TreeSet

    大家好,我是哪吒。 從數(shù)組中間刪除一個元素開銷很大,其原因是向數(shù)組中插入元素時,此元素之后的所有元素都要向后端移動,刪除時也是,數(shù)組中位于被刪除元素之后的所有元素都要向數(shù)組的前端移動。 此時,在Java中,可以通過鏈表解決這個問題。 數(shù)組是在連續(xù)的存儲

    2023年04月08日
    瀏覽(24)
  • java基礎(chǔ)之set集合練習(HashSet,LinkedHashSet,TreeSet)

    java基礎(chǔ)之set集合練習(HashSet,LinkedHashSet,TreeSet)

    Collection 接口的特點是 ????存放list與set共性內(nèi)容 沒有直接實現(xiàn)類 ?沒有明確的存儲特點要求 ????????? ; Set 接口的特點是元素 無 (有|無)順序,不可 ? (可以|不可以)重復; A.可以利用Set 創(chuàng)建集合對象,存儲多個對象 B.可以利用下標操作集合中的數(shù)據(jù) C.Set 集合中所

    2024年01月23日
    瀏覽(25)
  • java中interface的使用以及注意事項

    一、接口(interface)基本概念 接口(interface):是java中一種引用數(shù)據(jù)類型,可以看做方法的集合,其內(nèi)部主要就是封裝了方法,包含抽象方法(JDK 7及以前),默認方法和靜態(tài)方法(JDK 8),私有方法(JDK 9). 二、使用格式 ? 1.定義格式: ??public interface 接口名稱{ ??? //抽象方法 ???

    2024年02月06日
    瀏覽(19)
  • 【Java 基礎(chǔ)篇】深入理解Java HashMap:使用注意事項和性能優(yōu)化

    【Java 基礎(chǔ)篇】深入理解Java HashMap:使用注意事項和性能優(yōu)化

    Java是一種廣泛使用的編程語言,而集合是Java編程中不可或缺的一部分。在Java的集合框架中,HashMap是一個常用的數(shù)據(jù)結(jié)構(gòu),用于存儲鍵值對。本文將深入介紹HashMap集合,從基礎(chǔ)到高級用法,幫助您更好地理解和利用它。 HashMap是Java集合框架中的一個類,它實現(xiàn)了 Map 接口,用

    2024年02月06日
    瀏覽(40)
  • java中的String使用注意事項、StringBuilder、StringBuffer、StringJoiner

    java中的String使用注意事項、StringBuilder、StringBuffer、StringJoiner

    String使用注意事項 這里第二次創(chuàng)造了0個對象是因為字符串常量池中已經(jīng)有\(zhòng)\\"abc\\\" StringBuilder 注意StringBuilder支持鏈式編程 StringBuilder 線程安全與不安全的區(qū)別在于,當系統(tǒng)里存在很多人同時操作同一個StringBuilder就可能出bug,而StringBuilder不會。 StringJoiner

    2024年02月12日
    瀏覽(18)
  • 【Java集合進階】Collection 體系集合詳解(ArrayList,LinkedList,HashSet,TreeSet...)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包