1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        JCF的Set集合

        共 1573字,需瀏覽 4分鐘

         ·

        2022-12-18 09:44

        Set集合中不存在值相同的節(jié)點(diǎn),相信各位讀者都知道如何判斷兩個(gè)對(duì)象是否相同:將這兩個(gè)對(duì)象分別記為e1和e2,如果"e1.equals(e2)"的結(jié)果為true,或者e1對(duì)象和e2對(duì)象的內(nèi)存地址相同(e1==e2),就認(rèn)為這兩個(gè)對(duì)象相同。

        這個(gè)標(biāo)準(zhǔn)也是Map集合中判定兩個(gè)Key鍵對(duì)象是否相同的標(biāo)準(zhǔn)。這實(shí)際上可以解釋為什么JCF中的多個(gè)原生Set集合,其內(nèi)部結(jié)構(gòu)都依賴于對(duì)應(yīng)的Map集合的內(nèi)部結(jié)構(gòu)。

        本書在介紹Set集合前,先介紹了JCF中的多個(gè)原生Map集合,也主要是這個(gè)原因。例如,本書后面要介紹的HashSet集合,其內(nèi)部主要依賴于HashMap集合的內(nèi)部結(jié)構(gòu);后面要介紹的TreeSet集合,其內(nèi)部結(jié)構(gòu)主要依賴于HashMap集合的內(nèi)部結(jié)構(gòu),如圖4-1所示

        為了方便讀者閱讀,這里再次給出HashMap集合中判定Key鍵對(duì)象是否一致的源碼片段:

        Set集合概述

        因?yàn)镴CF中各種原生Set集合的內(nèi)部結(jié)構(gòu)都依賴于對(duì)應(yīng)的Map集合進(jìn)行實(shí)現(xiàn),而JCF中重要的原生Map集合已在第3章中進(jìn)行了詳細(xì)介紹,所以本章內(nèi)容相對(duì)精簡(jiǎn),實(shí)際上是在Map集合的工作原理之上做一些知識(shí)點(diǎn)補(bǔ)充。在介紹具體的Set集合前,需要介紹一下Set集合中幾個(gè)重要的接口和抽象類:java.util.SortedSet口 、java.util.NavigableSet口 和java.util.AbstractSet抽象類。

        java.util.SortedSet接口

        在一般情況下,Set集合中的數(shù)據(jù)對(duì)象是無序的。例如,在HashSet集合中,可以使用add()方法添加多個(gè)數(shù)據(jù)對(duì)象,這些數(shù)據(jù)對(duì)象在HashSet集合中的位置順序會(huì)受添加順序的影響,示例代碼如下。

        出現(xiàn)這樣的情況,是由HashSet集合的內(nèi)部結(jié)構(gòu)決定的——HashSet集合的內(nèi)部結(jié)構(gòu)和HashMap集合的內(nèi)部結(jié)構(gòu)相同。如果某個(gè)具體的Set集合實(shí)現(xiàn)了java.util.SortedSet接口,就表示該集合中的數(shù)據(jù)對(duì)象會(huì)按照某種比較方法進(jìn)行全局性的有序排列。實(shí)現(xiàn)了java.util.SortedSet接口的集合都提供了以下兩種比較方法。

        ? 使用一個(gè)實(shí)現(xiàn)了Comparable接口的類的對(duì)象進(jìn)行比較。這個(gè)對(duì)象來源于集合中K-V鍵值對(duì)節(jié)點(diǎn)的Key鍵信息。

        ? 通過在集合實(shí)例化時(shí)設(shè)置的Comparator比較器進(jìn)行比較。如果要采用這種方法,那么Set集合需要實(shí)現(xiàn)java.util.SortedSet接口。

        如果以上兩種比較方法都不可用,那么在調(diào)用相關(guān)方法或?qū)ο髸r(shí),會(huì)拋出ClassCastException異常。在java.util. SortedSet接口中的主要方法源碼如下。

        注意java.util.Comparator接口和java.lang.Comparable接口的區(qū)別,具體如下。

        ? java.util.Comparator:該接口可以解釋為比較器,實(shí)現(xiàn)該接口的類類似于一個(gè)工具,可以對(duì)兩個(gè)傳入的對(duì)象進(jìn)行比較。所以Comparator接口中需要被實(shí)現(xiàn)的compare(T o1,T o2)方法有兩個(gè)入?yún)?,分別表示要進(jìn)行比較的對(duì) 象 o1 和 對(duì) 象 o2 。 本 書 所 說 的 比 較 器 , 通 常 是 指 實(shí) 現(xiàn) 了java.util.Comparator接口的類,這些類的對(duì)象本身不具有排序功能,它們像工具一樣,主要用于幫助其他類的對(duì)象完成排序工作。? java.lang.Comparable:該接口可以解釋為類的對(duì)象本身是可比較的,也就是說,實(shí)現(xiàn)該接口的類的對(duì)象本身是具有排序功能的,所以Comparable接口中需要被實(shí)現(xiàn)的compareTo(T o)方法只有一個(gè)入?yún)?,表示與本對(duì)象進(jìn)行比較的目標(biāo)對(duì)象。本書所說的一個(gè)類的對(duì)象能進(jìn)行比較,通常是指該類實(shí)現(xiàn)了java.lang.Comparable接口。


        瀏覽 59
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            五月天国产激情视频在线观看 | 国产主播啪啪 | 城中村勾搭老熟女91 | 成人毛片免费在线 | 免费视频黄在线观看 | 欧美极品视频 | 婬乱欧美一二三区 | 婷婷丁香视频 | 久久综合新金瓶梅一级黄大片 | a亚洲v|