小編給大家分享一下Java中什么是Map集合,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、高陵網(wǎng)站維護(hù)、網(wǎng)站推廣。
一、什么是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ì)比f(wàn)or循環(huán)效率更快一點(diǎn)。
以上是“Java中什么是Map集合”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!