<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          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ì)象是無(wú)序的。例如,在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ì)象來(lái)源于集合中K-V鍵值對(duì)節(jié)點(diǎn)的Key鍵信息。

          ? 通過(guò)在集合實(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 。 本 書 所 說(shuō) 的 比 較 器 , 通 常 是 指 實(shí) 現(xiàn) 了java.util.Comparator接口的類,這些類的對(duì)象本身不具有排序功能,它們像工具一樣,主要用于幫助其他類的對(duì)象完成排序工作。? java.lang.Comparable:該接口可以解釋為類的對(duì)象本身是可比較的,也就是說(shuō),實(shí)現(xiàn)該接口的類的對(duì)象本身是具有排序功能的,所以Comparable接口中需要被實(shí)現(xiàn)的compareTo(T o)方法只有一個(gè)入?yún)?,表示與本對(duì)象進(jìn)行比較的目標(biāo)對(duì)象。本書所說(shuō)的一個(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)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产AⅤ无码片毛片一级一区2 | 日本精品一区二区三区视频 | 麻豆视屏 | 香蕉国产AV | 国产尤物视频 |