小编给大家分享一下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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。