Picses' sky

          Picses' sky
          posts - 43, comments - 29, trackbacks - 0, articles - 24

          Collection Framework study tips[zz]

          Posted on 2007-07-18 15:01 Matthew Chen 閱讀(183) 評(píng)論(0)  編輯  收藏 所屬分類: Java SE

           

          HashSet 類和 TreeSet 類

          “集合框架”支持 Set 接口兩種普通的實(shí)現(xiàn):HashSet 和 TreeSet。在更多情況下,您會(huì)使用 HashSet 存儲(chǔ)重復(fù)自由的集合??紤]到效率,添加到 HashSet 的對(duì)象需要采用恰當(dāng)分配散列碼的方式來(lái)實(shí)現(xiàn) hashCode() 方法。雖然大多數(shù)系統(tǒng)類覆蓋了 Object 中缺省的 hashCode() 實(shí)現(xiàn),但創(chuàng)建您自己的要添加到 HashSet 的類時(shí),別忘了覆蓋 hashCode()。當(dāng)您要從集合中以有序的方式抽取元素時(shí),TreeSet 實(shí)現(xiàn)會(huì)有用處。為了能順利進(jìn)行,添加到 TreeSet 的元素必須是可排序的。 “集合框架”添加對(duì) Comparable 元素的支持,在排序的“可比較的接口”部分中會(huì)詳細(xì)介紹。我們暫且假定一棵樹(shù)知道如何保持 java.lang 包裝程序器類元素的有序狀態(tài)。一般說(shuō)來(lái),先把元素添加到 HashSet,再把集合轉(zhuǎn)換為 TreeSet 來(lái)進(jìn)行有序遍歷會(huì)更快。

          為優(yōu)化 HashSet 空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。TreeSet 不包含調(diào)優(yōu)選項(xiàng),因?yàn)闃?shù)總是平衡的,保證了插入、刪除、查詢的性能為 log(n)。

          HashSet 和 TreeSet 都實(shí)現(xiàn) Cloneable 接口。
          HashSet中重復(fù)添加相同元素,HashSet中只有一個(gè)這樣的元素,并不重復(fù)。
          TreeSet中元素按升序排列

          HashMap 類和 TreeMap 類
          “集合框架”提供兩種常規(guī)的 Map 實(shí)現(xiàn):HashMap 和 TreeMap。和所有的具體實(shí)現(xiàn)一樣,使用哪種實(shí)現(xiàn)取決于您的特定需要。在 Map 中插入、刪除和定位元素,HashMap 是最好的選擇。但如果您要按順序遍歷鍵,那么 TreeMap 會(huì)更好。根據(jù)集合大小,先把元素添加到 HashMap,再把這種映射轉(zhuǎn)換成一個(gè)用于有序鍵遍歷的 TreeMap 可能更快。使用 HashMap 要求添加的鍵類明確定義了 hashCode() 實(shí)現(xiàn)。有了 TreeMap 實(shí)現(xiàn),添加到映射的元素一定是可排序的。我們將在排序中詳細(xì)介紹。

          為了優(yōu)化 HashMap 空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。這個(gè) TreeMap 沒(méi)有調(diào)優(yōu)選項(xiàng),因?yàn)樵摌?shù)總處于平衡狀態(tài)。
          HashMap 和 TreeMap 都實(shí)現(xiàn) Cloneable 接口。
          HashMap中重復(fù)添加相同元素,HashMap中只有一個(gè)這樣的元素,并不重復(fù)。
          Hashtable 類和 Properties 類是 Map 接口的歷史實(shí)現(xiàn)。


          “集合框架”提供了個(gè)特殊的 Set 接口:SortedSet,它保持元素的有序順序。
          該接口為集的子集和它的兩端(即頭和尾)提供了訪問(wèn)方法。當(dāng)您處理列表的子集時(shí),更改子集會(huì)反映到源集。此外,更改源集也會(huì)反映在子集上。發(fā)生這種情況的原因在于子集由兩端的元素而不是下標(biāo)元素指定。此外,如果 fromElement 是源集的一部分,它就是子集的一部分。但如果 toElement 是源集的一部分,它卻不是子集的一部分。如果您想要一個(gè)特殊的高端元素(to-element)在子集中,您必須找到下一個(gè)元素。對(duì)于一個(gè) String 來(lái)說(shuō),下一個(gè)元素是個(gè)附帶空字符的同一個(gè)字符串(string+"\0")。;
          添加到 SortedSet 的元素必須實(shí)現(xiàn) Comparable,否則您必須給它的實(shí)現(xiàn)類的構(gòu)造函數(shù)提供一個(gè) Comparator:TreeSet(您可以自己實(shí)現(xiàn)接口。但是“集合框架”只提供這樣一個(gè)具體的實(shí)現(xiàn)類。)

          “集合框架”提供了個(gè)特殊的Map 接口:SortedMap,它用來(lái)保持鍵的有序順序。
          此接口為映射的子集包括兩個(gè)端點(diǎn)提供了訪問(wèn)方法。除了排序是作用于映射的鍵以外,處理 SortedMap 和處理 SortedSet 一樣。“集合框架”提供的實(shí)現(xiàn)類是 TreeMap。
          因?yàn)閷?duì)于映射來(lái)說(shuō),每個(gè)鍵只能對(duì)應(yīng)一個(gè)值,如果在添加一個(gè)鍵-值對(duì)時(shí)比較兩個(gè)鍵產(chǎn)生了零返回值(通過(guò) Comparable 的 compareTo() 方法或通過(guò) Comparator 的 compare() 方法),那么,原始鍵對(duì)應(yīng)值被新的值替代。如果兩個(gè)元素相等,那還好。但如果不相等,那么您就應(yīng)該修改比較方法,讓比較方法和 equals() 的效果一致。

          主站蜘蛛池模板: 佛山市| 眉山市| 邳州市| 措勤县| 遂川县| 山阳县| 广东省| 石楼县| 宁都县| 祁阳县| 平乡县| 土默特右旗| 城市| 淮南市| 宜城市| 河南省| 兖州市| 浏阳市| 广宁县| 福建省| 大洼县| 贡觉县| 来宾市| 徐闻县| 方正县| 香格里拉县| 琼海市| 盘锦市| 久治县| 滕州市| 民和| 婺源县| 伊宁市| 安远县| 旬阳县| 林口县| 寿宁县| 梧州市| 乐山市| 行唐县| 丰镇市|