點擊查看:2015計算機等級考試二級Java入門教程章節(jié)匯總
點擊查看:2015計算機等級考試二級Java入門教程第十章匯總
10.7 使用映像
如同在這章開始我們著到的,一個映像(map)是一種存儲數(shù)據(jù)的方法,當你想要檢索一個對象時,可以最小化查找需求。每個對象與一個鍵相關,鍵用于決定對象引用的存儲位置。鍵和對象都存儲在映像中。給定一個鍵,你總可以定位到按鍵存儲的映像中的對象。更多地了解映像的存儲機制是如何工作的,特別是了解使用默認的散列過程含義為什么很重要我們將首先在HashMap類的背景下研究映像的使用。
散列過程
一個映像用一個數(shù)組存儲鍵和對象對。這個數(shù)組的下標由鍵對象產(chǎn)生的,通過使用對象的散列碼計算存儲鍵/對象數(shù)組中的偏移量。默認地,(完成)這些用到了作為鍵對象的hashCode()方法。這是從Object繼承到所有的類中的:
注意,盡管每個鍵必須惟一,甸個鍵不一定產(chǎn)生惟一的散列碼。當兩個或更多的不同
為了用默認的構造函數(shù)創(chuàng)建一個映像,你可以寫成:
hashmap themap.new hashmap()
映像的容量只是映像中能存儲的鍵/對象對的數(shù)量。容量按擊要自動增加,但這個操作相當耗費時間。映像的容雖值與散列碼結(jié)合作為鍵,你可以用來計算下標決定一個對象和它的鍵存儲的位置,為了使這個計算產(chǎn)生的下標值與鍵的散列碼相結(jié)合,當你自已指定容
量時,最理想的是使用容量的原始數(shù)字例如:
HasMap myMap=new Hashmap(151)
這個映像可以容納151個對象和相應的鍵,雖然實際存儲的對象數(shù)量從沒達到過這個數(shù)量。為了高效率的操作,映像中必須存在空的容量?湛土刻黾硬煌I產(chǎn)生相同散列表下標的可能性,更容易發(fā)生沖突,在映像中會有不小心丟失對象的危險結(jié)果
裝填因子(load factor)用于決定何時需要增加散列表的規(guī)模。當表的規(guī)摸達到了裝填因子和容量相乘產(chǎn)生的值時,容量將會自動增加到舊容只的2倍加l-加1是為了確保如果不是素數(shù),至少是奇數(shù)。0.75作為默認的裝填因子是個好的方案但如果你想減少它可以使用第二種構造函數(shù):
Hashmao aMaD=new HasMap(151,0.6f);//60%load factor
這個映像將比當前默認的構造函數(shù)效率高一點,但會消耗更多的未占用的空間。當90個對象存儲好后,容量將增加到303個(2*151+1)。
相關推薦:
2015計算機等級考試二級Java入門教程章節(jié)匯總
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |