欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

全面接觸Java集合框架 五六

系統(tǒng) 2368 0

3.3. SortedSet接口

  “集合框架”提供了個特殊的Set接口:SortedSet,它保持元素的有序順序。SortedSet接口為集的視圖(子集)和它的兩端(即頭和尾)提供了訪問方法。當(dāng)您處理列表的子集時,更改視圖會反映到源集。此外,更改源集也會反映在子集上。

發(fā)生這種情況的原因在于視圖由兩端的元素而不是下標(biāo)元素指定,所以如果您想要一個特殊的高端元素(toElement)在子集中,您必須找到下一個元素。

  添加到SortedSet實現(xiàn)類的元素必須實現(xiàn)Comparable接口,否則您必須給它的構(gòu)造函數(shù)提供一個Comparator接口的實現(xiàn)。TreeSet類是它的唯一一份實現(xiàn)。

  “因為集必須包含唯一的項,如果添加元素時比較兩個元素導(dǎo)致了0返回值(通過Comparable的compareTo()方法或Comparator的compare()方法),那么新元素就沒有添加進(jìn)去。如果兩個元素相等,那還好。但如果它們不相等的話,您接下來就應(yīng)該修改比較方法,讓比較方法和 equals() 的效果一致。”


  (1) Comparator comparator(): 返回對元素進(jìn)行排序時使用的比較器,如果使用Comparable接口的compareTo()方法對元素進(jìn)行比較,則返回null

  (2) Object first(): 返回有序集合中第一個(最低)元素

  (3) Object last(): 返回有序集合中最后一個(最高)元素

  (4) SortedSet subSet(Object fromElement, Object toElement): 返回從fromElement(包括)至toElement(不包括)范圍內(nèi)元素的SortedSet視圖(子集)

  (5) SortedSet headSet(Object toElement): 返回SortedSet的一個視圖,其內(nèi)各元素皆小于toElement

  (6) SortedSet tailSet(Object fromElement): 返回SortedSet的一個視圖,其內(nèi)各元素皆大于或等于fromElement

  3.4. AbstractSet抽象類

  AbstractSet類覆蓋了Object類的equals()和hashCode()方法,以確保兩個相等的集返回相同的哈希碼。若兩個集大小相等且包含相同元素,則這兩個集相等。按定義,集的哈希碼是集中元素哈希碼的總和。因此,不論集的內(nèi)部順序如何,兩個相等的集會有相同的哈希碼。

  3.4.1. Object類

  (1) boolean equals(Object obj): 對兩個對象進(jìn)行比較,以便確定它們是否相同

  (2) int hashCode(): 返回該對象的哈希碼。相同的對象必須返回相同的哈希碼

  3.5. HashSet類類和TreeSet類

  “集合框架”支持Set接口兩種普通的實現(xiàn):HashSet和TreeSet(TreeSet實現(xiàn)SortedSet接口)。在更多情況下,您會使用 HashSet 存儲重復(fù)自由的集合。考慮到效率,添加到 HashSet 的對象需要采用恰當(dāng)分配哈希碼的方式來實現(xiàn)hashCode()方法。雖然大多數(shù)系統(tǒng)類覆蓋了 Object中缺省的hashCode()和equals()實現(xiàn),但創(chuàng)建您自己的要添加到HashSet的類時,別忘了覆蓋 hashCode()和equals()。

  當(dāng)您要從集合中以有序的方式插入和抽取元素時,TreeSet實現(xiàn)會有用處。為了能順利進(jìn)行,添加到TreeSet的元素必須是可排序的。

  3.5.1.HashSet類

  (1) HashSet(): 構(gòu)建一個空的哈希集

  (2) HashSet(Collection c): 構(gòu)建一個哈希集,并且添加集合c中所有元素

  (3) HashSet(int initialCapacity): 構(gòu)建一個擁有特定容量的空哈希集

  (4) HashSet(int initialCapacity, float loadFactor): 構(gòu)建一個擁有特定容量和加載因子的空哈希集。LoadFactor是0.0至1.0之間的一個數(shù)

  3.5.2. TreeSet類

  (1) TreeSet():構(gòu)建一個空的樹集

  (2) TreeSet(Collection c): 構(gòu)建一個樹集,并且添加集合c中所有元素

  (3) TreeSet(Comparator c): 構(gòu)建一個樹集,并且使用特定的比較器對其元素進(jìn)行排序

  “comparator比較器沒有任何數(shù)據(jù),它只是比較方法的存放器。這種對象有時稱為函數(shù)對象。函數(shù)對象通常在“運行過程中”被定義為匿名內(nèi)部類的一個實例。”

  TreeSet(SortedSet s): 構(gòu)建一個樹集,添加有序集合s中所有元素,并且使用與有序集合s相同的比較器排序

  3.6. LinkedHashSet類

  LinkedHashSet擴(kuò)展HashSet。如果想跟蹤添加給HashSet的元素的順序,LinkedHashSet實現(xiàn)會有幫助。LinkedHashSet的迭代器按照元素的插入順序來訪問各個元素。它提供了一個可以快速訪問各個元素的有序集合。同時,它也增加了實現(xiàn)的代價,因為哈希表元中的各個元素是通過雙重鏈接式列表鏈接在一起的。

  (1) LinkedHashSet(): 構(gòu)建一個空的鏈接式哈希集

  (2) LinkedHashSet(Collection c): 構(gòu)建一個鏈接式哈希集,并且添加集合c中所有元素

  (3) LinkedHashSet(int initialCapacity): 構(gòu)建一個擁有特定容量的空鏈接式哈希集

  (4) LinkedHashSet(int initialCapacity, float loadFactor): 構(gòu)建一個擁有特定容量和加載因子的空鏈接式哈希集。LoadFactor是0.0至1.0之間的一個數(shù)

  “為優(yōu)化HashSet空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。TreeSet不包含調(diào)優(yōu)選項,因為樹總是平衡的。”
4. Map接口

  Map接口不是Collection接口的繼承。Map接口用于維護(hù)鍵/值對(key/value pairs)。該接口描述了從不重復(fù)的鍵到值的映射。
?
  (1) 添加、刪除操作:

  Object put(Object key, Object value): 將互相關(guān)聯(lián)的一個關(guān)鍵字與一個值放入該映像。如果該關(guān)鍵字已經(jīng)存在,那么與此關(guān)鍵字相關(guān)的新值將取代舊值。方法返回關(guān)鍵字的舊值,如果關(guān)鍵字原先并不存在,則返回null

  Object remove(Object key): 從映像中刪除與key相關(guān)的映射

  void putAll(Map t): 將來自特定映像的所有元素添加給該映像

  void clear(): 從映像中刪除所有映射

  “鍵和值都可以為null。但是,您不能把Map作為一個鍵或值添加給自身。”

  (2) 查詢操作:

  Object get(Object key): 獲得與關(guān)鍵字key相關(guān)的值,并且返回與關(guān)鍵字key相關(guān)的對象,如果沒有在該映像中找到該關(guān)鍵字,則返回null

  boolean containsKey(Object key): 判斷映像中是否存在關(guān)鍵字key

  boolean containsValue(Object value): 判斷映像中是否存在值value

  int size(): 返回當(dāng)前映像中映射的數(shù)量

  boolean isEmpty() :判斷映像中是否有任何映射

  (3) 視圖操作 :處理映像中鍵/值對組

  Set keySet(): 返回映像中所有關(guān)鍵字的視圖集

  “因為映射中鍵的集合必須是唯一的,您用Set支持。你還可以從視圖中刪除元素,同時,關(guān)鍵字和它相關(guān)的值將從源映像中被刪除,但是你不能添加任何元素。”

  Collection values():返回映像中所有值的視圖集

  “因為映射中值的集合不是唯一的,您用Collection支持。你還可以從視圖中刪除元素,同時,值和它的關(guān)鍵字將從源映像中被刪除,但是你不能添加任何元素。”

  Set entrySet(): 返回Map.Entry對象的視圖集,即映像中的關(guān)鍵字/值對

  “因為映射是唯一的,您用Set支持。你還可以從視圖中刪除元素,同時,這些元素將從源映像中被刪除,但是你不能添加任何元素。”

  4.1. Map.Entry接口

  Map的entrySet()方法返回一個實現(xiàn)Map.Entry接口的對象集合。集合中每個對象都是底層Map中一個特定的鍵/值對。

  通過這個集合的迭代器,您可以獲得每一個條目(唯一獲取方式)的鍵或值并對值進(jìn)行更改。當(dāng)條目通過迭代器返回后,除非是迭代器自身的remove()方法或者迭代器返回的條目的setValue()方法,其余對源Map外部的修改都會導(dǎo)致此條目集變得無效,同時產(chǎn)生條目行為未定義。

  (1) Object getKey(): 返回條目的關(guān)鍵字

  (2) Object getValue(): 返回條目的值

  (3) Object setValue(Object value): 將相關(guān)映像中的值改為value,并且返回舊值

  4.2. SortedMap接口

  “集合框架”提供了個特殊的Map接口:SortedMap,它用來保持鍵的有序順序。

  SortedMap接口為映像的視圖(子集),包括兩個端點提供了訪問方法。除了排序是作用于映射的鍵以外,處理SortedMap和處理SortedSet一樣。

  添加到SortedMap實現(xiàn)類的元素必須實現(xiàn)Comparable接口,否則您必須給它的構(gòu)造函數(shù)提供一個Comparator接口的實現(xiàn)。TreeMap類是它的唯一一份實現(xiàn)。

  “因為對于映射來說,每個鍵只能對應(yīng)一個值,如果在添加一個鍵/值對時比較兩個鍵產(chǎn)生了0返回值(通過Comparable的compareTo()方法或通過Comparator的compare()方法),那么,原始鍵對應(yīng)值被新的值替代。如果兩個元素相等,那還好。但如果不相等,那么您就應(yīng)該修改比較方法,讓比較方法和 equals() 的效果一致。”

  (1) Comparator comparator(): 返回對關(guān)鍵字進(jìn)行排序時使用的比較器,如果使用Comparable接口的compareTo()方法對關(guān)鍵字進(jìn)行比較,則返回null

  (2) Object firstKey(): 返回映像中第一個(最低)關(guān)鍵字

  (3) Object lastKey(): 返回映像中最后一個(最高)關(guān)鍵字

  (4) SortedMap subMap(Object fromKey, Object toKey): 返回從fromKey(包括)至toKey(不包括)范圍內(nèi)元素的SortedMap視圖(子集)

  (5) SortedMap headMap(Object toKey): 返回SortedMap的一個視圖,其內(nèi)各元素的key皆小于toKey

  (6) SortedSet tailMap(Object fromKey): 返回SortedMap的一個視圖,其內(nèi)各元素的key皆大于或等于fromKey

  4.3. AbstractMap抽象類

  和其它抽象集合實現(xiàn)相似,AbstractMap 類覆蓋了equals()和hashCode()方法以確保兩個相等映射返回相同的哈希碼。如果兩個映射大小相等、包含同樣的鍵且每個鍵在這兩個映射中對應(yīng)的值都相同,則這兩個映射相等。映射的哈希碼是映射元素哈希碼的總和,其中每個元素是Map.Entry接口的一個實現(xiàn)。因此,不論映射內(nèi)部順序如何,兩個相等映射會報告相同的哈希碼。

  4.4. HashMap類和TreeMap類

  “集合框架”提供兩種常規(guī)的Map實現(xiàn):HashMap和TreeMap (TreeMap實現(xiàn)SortedMap接口)。在Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那么TreeMap會更好。使用HashMap要求添加的鍵類明確定義了hashCode()和equals()的實現(xiàn)。

  這個TreeMap沒有調(diào)優(yōu)選項,因為該樹總處于平衡狀態(tài)。

  4.4.1. HashMap類

  為了優(yōu)化HashMap空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。

  (1) HashMap(): 構(gòu)建一個空的哈希映像

  (2) HashMap(Map m): 構(gòu)建一個哈希映像,并且添加映像m的所有映射

  (3) HashMap(int initialCapacity): 構(gòu)建一個擁有特定容量的空的哈希映像

  (4) HashMap(int initialCapacity, float loadFactor): 構(gòu)建一個擁有特定容量和加載因子的空的哈希映像

  4.4.2. TreeMap類

  TreeMap沒有調(diào)優(yōu)選項,因為該樹總處于平衡狀態(tài)。

  (1) TreeMap():構(gòu)建一個空的映像樹

  (2) TreeMap(Map m): 構(gòu)建一個映像樹,并且添加映像m中所有元素

  (3) TreeMap(Comparator c): 構(gòu)建一個映像樹,并且使用特定的比較器對關(guān)鍵字進(jìn)行排序

  (4) TreeMap(SortedMap s): 構(gòu)建一個映像樹,添加映像樹s中所有映射,并且使用與有序映像s相同的比較器排序

  4.5. LinkedHashMap類

  LinkedHashMap擴(kuò)展HashMap,以插入順序?qū)㈥P(guān)鍵字/值對添加進(jìn)鏈接哈希映像中。象LinkedHashSet一樣,LinkedHashMap內(nèi)部也采用雙重鏈接式列表。

  (1) LinkedHashMap(): 構(gòu)建一個空鏈接哈希映像

  (2) LinkedHashMap(Map m): 構(gòu)建一個鏈接哈希映像,并且添加映像m中所有映射

  (3) LinkedHashMap(int initialCapacity): 構(gòu)建一個擁有特定容量的空的鏈接哈希映像

  (4) LinkedHashMap(int initialCapacity, float loadFactor): 構(gòu)建一個擁有特定容量和加載因子的空的鏈接哈希映像

  (5) LinkedHashMap(int initialCapacity, float loadFactor,

  boolean accessOrder): 構(gòu)建一個擁有特定容量、加載因子和訪問順序排序的空的鏈接哈希映像

  “如果將accessOrder設(shè)置為true,那么鏈接哈希映像將使用訪問順序而不是插入順序來迭

  代各個映像。每次調(diào)用get或者put方法時,相關(guān)的映射便從它的當(dāng)前位置上刪除,然后放到鏈接式映像列表的結(jié)尾處(只有鏈接式映像列表中的位置才會受到影響,哈希表元則不受影響。哈希表映射總是待在對應(yīng)于關(guān)鍵字的哈希碼的哈希表元中)。”

  “該特性對于實現(xiàn)高速緩存的“刪除最近最少使用”的原則很有用。例如,你可以希望將最常訪問的映射保存在內(nèi)存中,并且從 數(shù)據(jù)庫 中讀取不經(jīng)常訪問的對象。當(dāng)你在表中找不到某個映射,并且該表中的映射已經(jīng)放得非常滿時,你可以讓迭代器進(jìn)入該表,將它枚舉的開頭幾個映射刪除掉。這些是最近最少使用的映射。”

  (6) protected boolean removeEldestEntry(Map.Entry eldest): 如果你想刪除最老的映射,則覆蓋該方法,以便返回true。當(dāng)某個映射已經(jīng)添加給映像之后,便調(diào)用該方法。它的默認(rèn)實現(xiàn)方法返回false,表示默認(rèn)條件下老的映射沒有被刪除。但是你可以重新定義本方法,以便有選擇地在最老的映射符合某個條件,或者映像超過了某個大小時,返回true。

  4.6. WeakHashMap類

  WeakHashMap是Map的一個特殊實現(xiàn),它使用WeakReference(弱引用)來存放哈希表關(guān)鍵字。使用這種方式時,當(dāng)映射的鍵在 WeakHashMap 的外部不再被引用時,垃圾收集器會將它回收,但它將把到達(dá)該對象的弱引用納入一個隊列。WeakHashMap的運行將定期檢查該隊列,以便找出新到達(dá)的弱應(yīng)用。當(dāng)一個弱引用到達(dá)該隊列時,就表示關(guān)鍵字不再被任何人使用,并且它已經(jīng)被收集起來。然后WeakHashMap便刪除相關(guān)的映射。

  (1) WeakHashMap(): 構(gòu)建一個空弱哈希映像

  (2) WeakHashMap(Map t): 構(gòu)建一個弱哈希映像,并且添加映像t中所有映射

  (3) WeakHashMap(int initialCapacity): 構(gòu)建一個擁有特定容量的空的弱哈希映像

  (4) WeakHashMap(int initialCapacity, float loadFactor): 構(gòu)建一個擁有特定容量和加載因子的空的弱哈希映像

  4.6. IdentityHashMap類

  IdentityHashMap也是Map的一個特殊實現(xiàn)。在這個類中,關(guān)鍵字的哈希碼不應(yīng)該由hashCode()方法來計算,而應(yīng)該由System.identityHashCode方法進(jìn)行計算(即使已經(jīng)重新定義了hashCode方法)。這是Object.hashCode根據(jù)對象的內(nèi)存地址來計算哈希碼時使用的方法。另外,為了對各個對象進(jìn)行比較,IdentityHashMap將使用==,而不使用equals方法。

  換句話說,不同的關(guān)鍵字對象,即使它們的內(nèi)容相同,也被視為不同的對象。IdentityHashMap類可以用于實現(xiàn)對象拓?fù)浣Y(jié)構(gòu)轉(zhuǎn)換(topology-preserving object graph transformations)(比如實現(xiàn)對象的串行化或深度拷貝),在進(jìn)行轉(zhuǎn)換時,需要一個“節(jié)點表”跟蹤那些已經(jīng)處理過的對象的引用。即使碰巧有對象相等,“節(jié)點表”也不應(yīng)視其相等。另一個應(yīng)用是維護(hù)代理對象。比如,調(diào)試工具希望在程序調(diào)試期間維護(hù)每個對象的一個代理對象。

  “IdentityHashMap類不是一般意義的Map實現(xiàn)!它的實現(xiàn)有意的違背了Map接口要求通過equals方法比較對象的約定。這個類僅使用在很少發(fā)生的需要強(qiáng)調(diào)等同性語義的情況。”

  (1) IdentityHashMap (): 構(gòu)建一個空的全同哈希映像,默認(rèn)預(yù)期最大尺寸為21

  “預(yù)期最大尺寸是映像期望把持的鍵/值映射的最大數(shù)目”

  (2) IdentityHashMap (Map m): 構(gòu)建一個全同哈希映像,并且添加映像m中所有映射

  (3) IdentityHashMap (int expectedMaxSize): 構(gòu)建一個擁有預(yù)期最大尺寸的空的全同哈希映像。放置超過預(yù)期最大尺寸的鍵/值映射時,將引起內(nèi)部 數(shù)據(jù)結(jié)構(gòu) 的增長,有時可能很費時

全面接觸Java集合框架 五六


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 中文字幕在线观看av | 婷婷97狠狠的狠狠的爱 | 99精品在线观看 | 日韩精品毛片 | 不卡久久| 久久道| 国产精品国产亚洲精品不卡 | 香蕉国产在线观看免费 | 亚洲成人精品 | 毛片在线观看视频 | 91av在线电影 | 精品久| 亚洲国产精品成 | 黄色网页免费 | 国产高清一国产免费软件 | 欧美日韩综合一区 | 日本一区二区视频 | 日韩精品一区二区三区中文字幕 | 蜜桃av人人夜夜澡人人爽 | 国产精品色综合 | 国产精品视_精品国产免费 亚洲综合在线另类色区奇米 | 天天干狠狠干 | 欧美一级艳片视频免费观看 | 欧美笫一页 | 成人久久免费视频 | 亚洲精品福利 | 亚洲欧美在线视频 | 超碰欧美 | 老色鬼a∨在线视频在线观看 | 亚洲国产欧洲精品路线久久 | 日韩一区二区三区视频 | 欧美成人伊人久久综合网 | 精品一区二区久久久久久按摩 | 亚洲激情中文 | 91高清在线观看 | 亚洲第一区视频在线观看 | 亚洲天堂日本 | 可米影院 | 欧美视频一区二免费视频 | 日本大片在线观看免费视频 | 国产精品欧美日韩 |