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

歡迎訪問 生活随笔!

生活随笔

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

java

Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)

發(fā)布時(shí)間:2025/3/21 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫在前面:由于前天項(xiàng)目老師建設(shè)局的項(xiàng)目快到驗(yàn)收階段,所以,前天晚上通宵,昨天睡了大半天,下午我們宿舍聚會(huì),所以時(shí)間有點(diǎn)耽誤,希望大家見諒

上接:

Java程序員從笨鳥到菜鳥之(四)java開發(fā)常用類(包裝,數(shù)字處理集合等)(上)


3.Set 接?口 也是 Collection 的一種擴(kuò)展,而與 List 不同的時(shí),在 Set 中的對(duì)象元素不能重復(fù),也就是說你不能把同樣的東西兩次放入同一個(gè) Set 容器中。?它的常用具體實(shí)現(xiàn)有 HashSet TreeSet 類。 HashSet 能快速定位一個(gè)元素,但是你放到 HashSet 中的對(duì)象需要實(shí)現(xiàn)? hashCode() 方法,它使用了前面說過的哈希碼的算法。而 TreeSet 則將放入其中的元素按序存放,這就要求你放入其中的對(duì)象是可排序的,這就用?到了集合框架提供的另外兩個(gè)實(shí)用類 Comparable Comparator 。一個(gè)類是可排序的,它就應(yīng)該實(shí)現(xiàn) Comparable 接口。有時(shí)多個(gè)類具?有相同的排序算法,那就不需要在每分別重復(fù)定義相同的排序算法,只要實(shí)現(xiàn) Comparator 接口即可。集合框架中還有兩個(gè)很實(shí)用的公用?類: Collections Arrays 。 Collections 提供了對(duì)一個(gè) Collection 容器進(jìn)行諸如排序、復(fù)制、查找和填充等一些非常有用?的方法, Arrays 則是對(duì)一個(gè)數(shù)組進(jìn)行類似的操作。?

Hash
Hash
表是一種數(shù)據(jù)結(jié)構(gòu),用來查找對(duì)象。Hash表為每個(gè)對(duì)象計(jì)算出一個(gè)整數(shù),稱為Hash?Code(哈希碼)。Hash表是個(gè)鏈接式列表的陣列。每個(gè)列表稱為一個(gè)buckets(哈希表元)。對(duì)象位置的計(jì)算 index?=?HashCode?%?buckets?(HashCode為對(duì)象哈希碼,buckets為哈希表元總數(shù))。

當(dāng)你添加元素時(shí),有時(shí)你會(huì)遇到已經(jīng)填充了元素的哈希表元,這種情況稱為
Hash?Collisions(哈希沖突)。這時(shí),你必須判斷該元素是否已經(jīng)存在于該哈希表中。
如果哈希碼是合理地隨機(jī)分布的,并且哈希表元的數(shù)量足夠大,那么哈希沖突的數(shù)量就會(huì)減少。同時(shí),你也可以通過設(shè)定一個(gè)初始的哈希表元數(shù)量來更好地控制哈?希表的運(yùn)行。初始哈希表元的數(shù)量為 
buckets?=?size?*?150%?+?1?(size為預(yù)期元素的數(shù)量)
如果哈希?表中的元素放得太滿,就必須進(jìn)行
rehashing(再哈希)。再哈希使哈希表元數(shù)增倍,并將原有的對(duì)象重新導(dǎo)入新的哈希表元中,而原始的哈希表元被刪?除。load?factor(加載因子)決定何時(shí)要對(duì)哈希表進(jìn)行再哈希。在Java編程語言中,加載因子默認(rèn)值為0.75,默認(rèn)哈希表元為101。
Comparable
接口和Comparator接口
集合框架中有兩種比較接口:Comparable接口和Comparator接口。像StringIntegerJava內(nèi)建類實(shí)現(xiàn)?Comparable接口以提供一定排序方式,但這樣只能實(shí)現(xiàn)該接口一次。對(duì)于那些沒有實(shí)現(xiàn)Comparable接口的類、或者自定義的類,您可以通過?Comparator接口來定義您自己的比較方式。

Comparable
接口

java.lang包中,Comparable接口適用于一個(gè)類有自然順序的時(shí)候。假定對(duì)象集合是同一類型,該接口允許您把集合排序成自然順序。
(1)?int?compareTo(Object?o):?
比較當(dāng)前實(shí)例對(duì)象與對(duì)象o,如果位于對(duì)象o之前,返回負(fù)值,如果兩個(gè)對(duì)象在排序中位置相同,則返回0,如果位于對(duì)象o后面,則返回正值
?在?
Java?2?SDK版本1.4中有二十四個(gè)類實(shí)現(xiàn)Comparable接口。下表展示了8種基本類型的自然排序。雖然一些類共享同一種自然排序,但只有相互可比的類才能排序。

排序

BigDecimal,BigInteger,Byte,?Double,?Float,Integer,Long,Short

按數(shù)字大小排序

Character

按?Unicode?值的數(shù)字大小排序

String

按字符串中字符?Unicode?值排序


利用
Comparable接口創(chuàng)建您自己的類的排序順序,只是實(shí)現(xiàn)compareTo()方法的問題。通常就是依賴幾個(gè)數(shù)據(jù)成員的自然排序。同時(shí)類也應(yīng)該覆蓋equals()hashCode()以確保兩個(gè)相等的對(duì)象返回同一個(gè)哈希碼。

Comparator接口
若一個(gè)類不能用于實(shí)現(xiàn)
java.lang.Comparable,或者您不喜歡缺省的Comparable行為并想提供自己的排序順序(可能多種排序方式),你可以實(shí)現(xiàn)Comparator接口,從而定義一個(gè)比較器。
(1)int?compare(Object?o1,?Object?o2):?
對(duì)兩個(gè)對(duì)象o1o2進(jìn)行比較,如果o1位于o2的前面,則返回負(fù)值,如果在排序順序中認(rèn)為o1o2是相同的,返回0,如果o1位于o2的后面,則返回正值

?“
Comparable相似,0返回值不表示元素相等。一個(gè)0返回值只是表示兩個(gè)對(duì)象排在同一位置。由Comparator用戶決定如何處理。如果兩個(gè)不相等的元素比較的結(jié)果為零,您首先應(yīng)該確信那就是您要的結(jié)果,然后記錄行為。
?(2)boolean?equals(Object?obj):?
指示對(duì)象obj是否和比較器相等。
該方法覆寫Objectequals()方法,檢查的是Comparator實(shí)現(xiàn)的等同性,不是處于比較狀態(tài)下的對(duì)象。”?

SortedSet接口

集合框架提供了個(gè)特殊的Set接口:SortedSet,它保持元素的有序順序。SortedSet接口為集的視圖(子集)和它的兩端(即頭和尾)?提供了訪問方法。當(dāng)您處理列表的子集時(shí),更改視圖會(huì)反映到源集。此外,更改源集也會(huì)反映在子集上。發(fā)生這種情況的原因在于視圖由兩端的元素而不是下標(biāo)元素?指定,所以如果您想要一個(gè)特殊的高端元素(toElement)在子集中,您必須找到下一個(gè)元素。
添加到
SortedSet實(shí)現(xiàn)類的元素必須實(shí)現(xiàn)Comparable接口,否則您必須給它的構(gòu)造函數(shù)提供一個(gè)Comparator接口的實(shí)現(xiàn)。TreeSet類是它的唯一一份實(shí)現(xiàn)。
?“
因?yàn)榧仨毎ㄒ坏捻?xiàng),如果添加元素時(shí)比較兩個(gè)元素導(dǎo)致了0返回值(通過ComparablecompareTo()方法或Comparator?compare()方法),那么新元素就沒有添加進(jìn)去。如果兩個(gè)元素相等,那還好。但如果它們不相等的話,您接下來就應(yīng)該修改比較方法,讓比較方法和?equals()?的效果一致。

(1)?Comparator?comparator():?
返回對(duì)元素進(jìn)行排序時(shí)使用的比較器,如果使用Comparable接口的compareTo()方法對(duì)元素進(jìn)行比較,則返回null
(2)?Object?first():?
返回有序集合中第一個(gè)(最低)元素
(3)?Object?last():?
返回有序集合中最后一個(gè)(最高)元素
(4)SortedSet?subSet(Object?fromElement,?Object?toElement):?
返回從fromElement(包括)toElement(不包括)范圍內(nèi)元素的SortedSet視圖(子集)
(5)?SortedSet?headSet(Object?toElement):?
返回SortedSet的一個(gè)視圖,其內(nèi)各元素皆小于toElement
(6)?SortedSet?tailSet(Object?fromElement):?
返回SortedSet的一個(gè)視圖,其內(nèi)各元素皆大于或等于fromElement
AbstractSet
抽象類
AbstractSet
類覆蓋了Object類的equals()hashCode()方法,以確保兩個(gè)相等的集返回相同的哈希碼。若兩個(gè)集大小相等?且包含相同元素,則這兩個(gè)集相等。按定義,集的哈希碼是集中元素哈希碼的總和。因此,不論集的內(nèi)部順序如何,兩個(gè)相等的集會(huì)有相同的哈希碼。


HashSet
類類和TreeSet

集合框架支持Set接口兩種普通的實(shí)現(xiàn):HashSetTreeSet(TreeSet實(shí)現(xiàn)SortedSet接口)。在更多情況下,您會(huì)使用?HashSet?存儲(chǔ)重復(fù)自由的集合??紤]到效率,添加到?HashSet?的對(duì)象需要采用恰當(dāng)分配哈希碼的方式來實(shí)現(xiàn)hashCode()方法。雖然大多數(shù)系統(tǒng)類覆蓋了?Object中缺省的hashCode()equals()實(shí)現(xiàn),但創(chuàng)建您自己的要添加到HashSet的類時(shí),別忘了覆蓋?hashCode()equals()。
當(dāng)您要從集合中以有序的方式插入和抽取元素時(shí),
TreeSet實(shí)現(xiàn)會(huì)有用處。為了能順利進(jìn)行,添加到TreeSet的元素必須是可排序的。

HashSet


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

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

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

(4)?HashSet(int?initialCapacity,?float?loadFactor):?
構(gòu)建一個(gè)擁有特定容量和加載因子的空哈希集。LoadFactor0.01.0之間的一個(gè)數(shù)

TreeSet


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

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

(3)?TreeSet(Comparator?c):?
構(gòu)建一個(gè)樹集,并且使用特定的比較器對(duì)其元素進(jìn)行排序
“comparator
比較器沒有任何數(shù)據(jù),它只是比較方法的存放器。這種對(duì)象有時(shí)稱為函數(shù)對(duì)象。函數(shù)對(duì)象通常在運(yùn)行過程中被定義為匿名內(nèi)部類的一個(gè)實(shí)例。

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

LinkedHashSet


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

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

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

(4)?LinkedHashSet(int?initialCapacity,?float?loadFactor):?
構(gòu)建一個(gè)擁有特定容量和加載因子的空鏈接式哈希集。LoadFactor0.01.0之間的一個(gè)數(shù)
為優(yōu)化HashSet空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。TreeSet不包含調(diào)優(yōu)選項(xiàng),因?yàn)闃淇偸瞧胶獾摹?/span>

4.Map是一種把鍵對(duì)象和值對(duì)象進(jìn)行關(guān)聯(lián)的容器,而一個(gè)值對(duì)象又可以是一個(gè)Map,依次類推,這樣就可形成一個(gè)多級(jí)映射。對(duì)于鍵對(duì)象來說,像Set一樣,一?個(gè)Map容器中的鍵對(duì)象不允許重復(fù),這是為了保持查找結(jié)果的一致性;如果有兩個(gè)鍵對(duì)象一樣,那你想得到那個(gè)鍵對(duì)象所對(duì)應(yīng)的值對(duì)象時(shí)就有問題了,可能你得到?的并不是你想的那個(gè)值對(duì)象,結(jié)果會(huì)造成混亂,所以鍵的唯一性很重要,也是符合集合的性質(zhì)的。當(dāng)然在使用過程中,某個(gè)鍵所對(duì)應(yīng)的值對(duì)象可能會(huì)發(fā)生變化,這時(shí)?會(huì)按照最后一次修改的值對(duì)象與鍵對(duì)應(yīng)。對(duì)于值對(duì)象則沒有唯一性的要求。你可以將任意多個(gè)鍵都映射到一個(gè)值對(duì)象上,這不會(huì)發(fā)生任何問題(不過對(duì)你的使用卻可?能會(huì)造成不便,你不知道你得到的到底是那一個(gè)鍵所對(duì)應(yīng)的值對(duì)象)。Map有兩種比較常用的實(shí)現(xiàn):HashMapTreeMapHashMap也用到了?哈希碼的算法,以便快速查找一個(gè)鍵,TreeMap則是對(duì)鍵按序存放,因此它便有一些擴(kuò)展的方法,比如firstKey(),lastKey()等,你還?可以從TreeMap中指定一個(gè)范圍以取得其子Map。鍵和值的關(guān)聯(lián)很簡單,用pub(Object?key,Object?value)方法即可將一個(gè)鍵與一個(gè)值對(duì)象相關(guān)聯(lián)。用get(Object?key)可得到與此key對(duì)象所對(duì)應(yīng)的值對(duì)象。

Map接口不是Collection接口的繼承。Map接口用于維護(hù)鍵/值對(duì)(key/value?pairs)。該接口描述了從不重復(fù)的鍵到值的映射。

(1)?
添加、刪除操作:

Object?put(Object?key,?Object?value):?
將互相關(guān)聯(lián)的一個(gè)關(guān)鍵字與一個(gè)值放入該映像。如果該關(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作為一個(gè)鍵或值添加給自身。

(2)?
查詢操作:

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

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

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

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

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

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

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

因?yàn)橛成渲墟I的集合必須是唯一的,您用Set支持。你還可以從視圖中刪除元素,同時(shí),關(guān)鍵字和它相關(guān)的值將從源映像中被刪除,但是你不能添加任何元素。

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

因?yàn)橛成渲兄档募喜皇俏ㄒ坏?#xff0c;您用Collection支持。你還可以從視圖中刪除元素,同時(shí),值和它的關(guān)鍵字將從源映像中被刪除,但是你不能添加任何元素。

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

因?yàn)橛成涫俏ㄒ坏?#xff0c;您用Set支持。你還可以從視圖中刪除元素,同時(shí),這些元素將從源映像中被刪除,但是你不能添加任何元素。

Map.Entry接口
Map
entrySet()方法返回一個(gè)實(shí)現(xiàn)Map.Entry接口的對(duì)象集合。集合中每個(gè)對(duì)象都是底層Map中一個(gè)特定的鍵/值對(duì)。
通過這個(gè)集合的迭代器,您可以獲得每一個(gè)條目
(唯一獲取方式)的鍵或值并對(duì)值進(jìn)行更改。當(dāng)條目通過迭代器返回后,除非是迭代器自身的remove()方?法或者迭代器返回的條目的setValue()方法,其余對(duì)源Map外部的修改都會(huì)導(dǎo)致此條目集變得無效,同時(shí)產(chǎn)生條目行為未定義。
?(1)?Object?getKey():?
返回條目的關(guān)鍵字

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

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

SortedMap
接口

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

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

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

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

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

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

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

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

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

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

AbstractMap
抽象類

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

HashMap
類和TreeMap

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

這個(gè)
TreeMap沒有調(diào)優(yōu)選項(xiàng),因?yàn)樵摌淇偺幱谄胶鉅顟B(tài)。

HashMap


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

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

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

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

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

TreeMap


TreeMap
沒有調(diào)優(yōu)選項(xiàng),因?yàn)樵摌淇偺幱谄胶鉅顟B(tài)。

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

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

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

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

LinkedHashMap


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

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

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

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

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

(5)?LinkedHashMap(int?initialCapacity,?float?loadFactor,

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

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

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

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

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


?本文來自:曹勝歡博客專欄。轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.Net/csh624366188


from:?http://blog.csdn.net/csh624366188/article/details/7294878

總結(jié)

以上是生活随笔為你收集整理的Java程序员从笨鸟到菜鸟之(五)java开发常用类(包装,数字处理集合等)(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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