日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java LinkedHashMap的实现原理详解

發(fā)布時(shí)間:2023/12/4 java 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java LinkedHashMap的实现原理详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.??? LinkedHashSet概述:

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

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

?

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

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

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

Java代碼??
  • public?class?LinkedHashSet<E>??
  • ????extends?HashSet<E>??
  • ????implements?Set<E>,?Cloneable,?java.io.Serializable?{??
  • ??
  • ????private?static?final?long?serialVersionUID?=?-2851667679971038690L;??
  • ??
  • ????/**?
  • ?????*?構(gòu)造一個(gè)帶有指定初始容量和加載因子的新空鏈接哈希set。?
  • ?????*?
  • ?????*?底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)有指定初始容量和加載因子的LinkedHashMap實(shí)例。?
  • ?????*?@param?initialCapacity?初始容量。?
  • ?????*?@param?loadFactor?加載因子。?
  • ?????*/??
  • ????public?LinkedHashSet(int?initialCapacity,?float?loadFactor)?{??
  • ????????super(initialCapacity,?loadFactor,?true);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?構(gòu)造一個(gè)帶指定初始容量和默認(rèn)加載因子0.75的新空鏈接哈希set。?
  • ?????*?
  • ?????*?底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)帶指定初始容量和默認(rèn)加載因子0.75的LinkedHashMap實(shí)例。?
  • ?????*?@param?initialCapacity?初始容量。?
  • ?????*/??
  • ????public?LinkedHashSet(int?initialCapacity)?{??
  • ????????super(initialCapacity,?.75f,?true);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?構(gòu)造一個(gè)帶默認(rèn)初始容量16和加載因子0.75的新空鏈接哈希set。?
  • ?????*?
  • ?????*?底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)帶默認(rèn)初始容量16和加載因子0.75的LinkedHashMap實(shí)例。?
  • ?????*/??
  • ????public?LinkedHashSet()?{??
  • ????????super(16,?.75f,?true);??
  • ????}??
  • ??
  • ????/**?
  • ?????*?構(gòu)造一個(gè)與指定collection中的元素相同的新鏈接哈希set。?
  • ?????*??
  • ?????*?底層會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造一個(gè)足以包含指定collection?
  • ?????*?中所有元素的初始容量和加載因子為0.75的LinkedHashMap實(shí)例。?
  • ?????*?@param?c?其中的元素將存放在此set中的collection。?
  • ?????*/??
  • ????public?LinkedHashSet(Collection<??extends?E>?c)?{??
  • ????????super(Math.max(2*c.size(),?11),?.75f,?true);??
  • ????????addAll(c);??
  • ????}??
  • }??
  • ???在父類HashSet中,專為L(zhǎng)inkedHashSet提供的構(gòu)造方法如下,該方法為包訪問(wèn)權(quán)限,并未對(duì)外公開(kāi)。

    Java代碼??
  • /**?
  • ?????*?以指定的initialCapacity和loadFactor構(gòu)造一個(gè)新的空鏈接哈希集合。?
  • ?????*?此構(gòu)造函數(shù)為包訪問(wèn)權(quán)限,不對(duì)外公開(kāi),實(shí)際只是是對(duì)LinkedHashSet的支持。?
  • ?????*?
  • ?????*?實(shí)際底層會(huì)以指定的參數(shù)構(gòu)造一個(gè)空LinkedHashMap實(shí)例來(lái)實(shí)現(xiàn)。?
  • ?????*?@param?initialCapacity?初始容量。?
  • ?????*?@param?loadFactor?加載因子。?
  • ?????*?@param?dummy?標(biāo)記。?
  • ?????*/??
  • ????HashSet(int?initialCapacity,?float?loadFactor,?boolean?dummy)?{??
  • ????map?=?new?LinkedHashMap<E,Object>(initialCapacity,?loadFactor);??
  • ????}??
  • ????由上述源代碼可見(jiàn),LinkedHashSet通過(guò)繼承HashSet,底層使用LinkedHashMap,以很簡(jiǎn)單明了的方式來(lái)實(shí)現(xiàn)了其自身的所有功能。


    轉(zhuǎn)自:http://zhangshixi.iteye.com/blog/673319


    總結(jié)

    以上是生活随笔為你收集整理的Java LinkedHashMap的实现原理详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。