小編給大家分享一下Java中什么是Map集合,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一、什么是Map
不同于List單列的線性結(jié)構(gòu),Java中的Map提供的是一種雙列映射的存儲(chǔ)集合,它能夠提供一對(duì)一的數(shù)據(jù)處理能力,雙列中的第一列我們稱為key,第二列就是value,一個(gè)key只能夠在一個(gè)Map中出現(xiàn)最多一次,通過一個(gè)key能夠獲取Map中唯一一個(gè)與之對(duì)應(yīng)的value值,正是它的這種一對(duì)一映射的數(shù)據(jù)處理關(guān)系,在實(shí)際應(yīng)用中可以通過一個(gè)key快速定位到對(duì)應(yīng)的value。
Map的三個(gè)特點(diǎn):
包含鍵值對(duì)
鍵唯一
鍵對(duì)應(yīng)的值唯一
二、Map集合常用的遍歷方式
遍歷Map集合的常用方式有三種:
使用keySet的方式
使用entrySet的方式
使用values()取值的方式
這三種方式中,都有對(duì)應(yīng)的for循環(huán)遍歷和Iterator遍歷的方式取值。
keySet是鍵的集合,Set里面的類型即key的類型;
entrySet是鍵-值對(duì)的集合,Set里面的類型是Map.Entry,Entry是一個(gè)鍵-值對(duì);
keySet():迭代后只能通過get()取key;
entrySet():迭代后可以e.getKey(),e.getValue()取key和value,返回的是Entry接口;
三、遍歷的性能對(duì)比
for each與顯示調(diào)用Iterator等價(jià),除了第三種方式(for each map.keySet()),再調(diào)用get獲取方式外,其他三種方式性能相當(dāng)。本例還是hash值散列較好的情況,若散列算法較差,第三種方式會(huì)更加耗時(shí)。
1、在數(shù)據(jù)元素的數(shù)量比較大時(shí),entrySet()方式的遍歷效率快于keySet(),有兩個(gè)原因 :
(1)一個(gè)原因是keySet相當(dāng)于遍歷了2次,一次是對(duì)key的Set集合的遍歷,二次是每次遍歷過程都要通過key和map.get(key)來獲取value值。
(2)第二個(gè)原因是map.get(key)的時(shí)候,底層是根據(jù)key的hashCode值經(jīng)過哈希算法得到一個(gè)hash值,然后作為索引映射到對(duì)應(yīng)的table數(shù)組的索引位置,這是一次密集型計(jì)算,很耗費(fèi)CPU,如果有大量的元素,則會(huì)使CPU使用率飆升,影響響應(yīng)速度,而entrySet()返回的set里面的元素都是Map.Enpty類型,key和value就是這個(gè)類的一個(gè)屬性,entry.getKey()和entry.getValue()效率肯定很高。
2、不過,在數(shù)據(jù)元素的數(shù)量比較小的情況小,keySet()方式的遍歷效率快于entrySet()。
3、values()是返回Map的所有value的集合的Collection,只能遍歷到value,很難遍歷到key,所以一般不用,如果當(dāng)我們只需要取得value值時(shí),采用values來遍歷效率更高。
4、從上面的幾種方式的for循環(huán)遍歷和Iterator遍歷的方式耗時(shí)結(jié)果來看,Iterator遍歷的效率會(huì)比for循環(huán)效率更快一點(diǎn)。
以上是“Java中什么是Map集合”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道!
當(dāng)前文章:Java中什么是Map集合-創(chuàng)新互聯(lián)
文章出自:http://www.chinadenli.net/article48/dcijep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、軟件開發(fā)、App開發(fā)、網(wǎng)站建設(shè)、電子商務(wù)、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容