小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

LinkedHashSet的實(shí)現(xiàn)原理

 昵稱20874412 2017-09-19

1.    LinkedHashSet概述:

   LinkedHashSet是具有可預(yù)知迭代順序的Set接口的哈希表和鏈接列表實(shí)現(xiàn)。此實(shí)現(xiàn)與HashSet的不同之處在于,后者維護(hù)著一個(gè)運(yùn)行于所有條目的雙重鏈接列表。此鏈接列表定義了迭代順序,該迭代順序可為插入順序或是訪問順序。

   注意,此實(shí)現(xiàn)不是同步的。如果多個(gè)線程同時(shí)訪問鏈接的哈希Set,而其中至少一個(gè)線程修改了該Set,則它必須保持外部同步。

 

2.    LinkedHashSet的實(shí)現(xiàn):

   對(duì)于LinkedHashSet而言,它繼承與HashSet、又基于LinkedHashMap來實(shí)現(xiàn)的。

   LinkedHashSet底層使用LinkedHashMap來保存所有元素,它繼承與HashSet,其所有的方法操作上又與HashSet相同,因此LinkedHashSet 的實(shí)現(xiàn)上非常簡(jiǎn)單,只提供了四個(gè)構(gòu)造方法,并通過傳遞一個(gè)標(biāo)識(shí)參數(shù),調(diào)用父類的構(gòu)造器,底層構(gòu)造一個(gè)LinkedHashMap來實(shí)現(xiàn),在相關(guān)操作上與父類HashSet的操作相同,直接調(diào)用父類HashSet的方法即可。LinkedHashSet的源代碼如下:

Java代碼  收藏代碼
  1. public class LinkedHashSet<E>  
  2.     extends HashSet<E>  
  3.     implements Set<E>, Cloneable, java.io.Serializable {  
  4.   
  5.     private static final long serialVersionUID = -2851667679971038690L;  
  6.   
  7.     /** 
  8.      * 構(gòu)造一個(gè)帶有指定初始容量和加載因子的新空鏈接哈希set。 
  9.      * 
  10.      * 底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)有指定初始容量和加載因子的LinkedHashMap實(shí)例。 
  11.      * @param initialCapacity 初始容量。 
  12.      * @param loadFactor 加載因子。 
  13.      */  
  14.     public LinkedHashSet(int initialCapacity, float loadFactor) {  
  15.         super(initialCapacity, loadFactor, true);  
  16.     }  
  17.   
  18.     /** 
  19.      * 構(gòu)造一個(gè)帶指定初始容量和默認(rèn)加載因子0.75的新空鏈接哈希set。 
  20.      * 
  21.      * 底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)帶指定初始容量和默認(rèn)加載因子0.75的LinkedHashMap實(shí)例。 
  22.      * @param initialCapacity 初始容量。 
  23.      */  
  24.     public LinkedHashSet(int initialCapacity) {  
  25.         super(initialCapacity, .75f, true);  
  26.     }  
  27.   
  28.     /** 
  29.      * 構(gòu)造一個(gè)帶默認(rèn)初始容量16和加載因子0.75的新空鏈接哈希set。 
  30.      * 
  31.      * 底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)帶默認(rèn)初始容量16和加載因子0.75的LinkedHashMap實(shí)例。 
  32.      */  
  33.     public LinkedHashSet() {  
  34.         super(16, .75f, true);  
  35.     }  
  36.   
  37.     /** 
  38.      * 構(gòu)造一個(gè)與指定collection中的元素相同的新鏈接哈希set。 
  39.      *  
  40.      * 底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)足以包含指定collection 
  41.      * 中所有元素的初始容量和加載因子為0.75的LinkedHashMap實(shí)例。 
  42.      * @param c 其中的元素將存放在此set中的collection。 
  43.      */  
  44.     public LinkedHashSet(Collection<? extends E> c) {  
  45.         super(Math.max(2*c.size(), 11), .75f, true);  
  46.         addAll(c);  
  47.     }  
  48. }  

   在父類HashSet中,專為L(zhǎng)inkedHashSet提供的構(gòu)造方法如下,該方法為包訪問權(quán)限,并未對(duì)外公開。

Java代碼  收藏代碼
  1. /** 
  2.      * 以指定的initialCapacity和loadFactor構(gòu)造一個(gè)新的空鏈接哈希集合。 
  3.      * 此構(gòu)造函數(shù)為包訪問權(quán)限,不對(duì)外公開,實(shí)際只是是對(duì)LinkedHashSet的支持。 
  4.      * 
  5.      * 實(shí)際底層會(huì)以指定的參數(shù)構(gòu)造一個(gè)空LinkedHashMap實(shí)例來實(shí)現(xiàn)。 
  6.      * @param initialCapacity 初始容量。 
  7.      * @param loadFactor 加載因子。 
  8.      * @param dummy 標(biāo)記。 
  9.      */  
  10.     HashSet(int initialCapacity, float loadFactor, boolean dummy) {  
  11.     map = new LinkedHashMap<E,Object>(initialCapacity, loadFactor);  
  12.     }  

    由上述源代碼可見,LinkedHashSet通過繼承HashSet,底層使用LinkedHashMap,以很簡(jiǎn)單明了的方式來實(shí)現(xiàn)了其自身的所有功能。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多