您好,登錄后才能下訂單哦!
小編給大家分享一下Java中什么是Map集合,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
一、什么是Map
不同于List單列的線性結構,Java中的Map提供的是一種雙列映射的存儲集合,它能夠提供一對一的數據處理能力,雙列中的第一列我們稱為key,第二列就是value,一個key只能夠在一個Map中出現最多一次,通過一個key能夠獲取Map中唯一一個與之對應的value值,正是它的這種一對一映射的數據處理關系,在實際應用中可以通過一個key快速定位到對應的value。
Map的三個特點:
包含鍵值對
鍵唯一
鍵對應的值唯一
二、Map集合常用的遍歷方式
遍歷Map集合的常用方式有三種:
使用keySet的方式
使用entrySet的方式
使用values()取值的方式
這三種方式中,都有對應的for循環遍歷和Iterator遍歷的方式取值。
keySet是鍵的集合,Set里面的類型即key的類型;
entrySet是鍵-值對的集合,Set里面的類型是Map.Entry,Entry是一個鍵-值對;
keySet():迭代后只能通過get()取key;
entrySet():迭代后可以e.getKey(),e.getValue()取key和value,返回的是Entry接口;
三、遍歷的性能對比
for each與顯示調用Iterator等價,除了第三種方式(for each map.keySet()),再調用get獲取方式外,其他三種方式性能相當。本例還是hash值散列較好的情況,若散列算法較差,第三種方式會更加耗時。
1、在數據元素的數量比較大時,entrySet()方式的遍歷效率快于keySet(),有兩個原因 :
(1)一個原因是keySet相當于遍歷了2次,一次是對key的Set集合的遍歷,二次是每次遍歷過程都要通過key和map.get(key)來獲取value值。
(2)第二個原因是map.get(key)的時候,底層是根據key的hashCode值經過哈希算法得到一個hash值,然后作為索引映射到對應的table數組的索引位置,這是一次密集型計算,很耗費CPU,如果有大量的元素,則會使CPU使用率飆升,影響響應速度,而entrySet()返回的set里面的元素都是Map.Enpty類型,key和value就是這個類的一個屬性,entry.getKey()和entry.getValue()效率肯定很高。
2、不過,在數據元素的數量比較小的情況小,keySet()方式的遍歷效率快于entrySet()。
3、values()是返回Map的所有value的集合的Collection,只能遍歷到value,很難遍歷到key,所以一般不用,如果當我們只需要取得value值時,采用values來遍歷效率更高。
4、從上面的幾種方式的for循環遍歷和Iterator遍歷的方式耗時結果來看,Iterator遍歷的效率會比for循環效率更快一點。
以上是“Java中什么是Map集合”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。