ITPub博客

首页 > 应用开发 > Java > Map集合(Java基础、skycto JEEditor)

Map集合(Java基础、skycto JEEditor)

原创 Java 作者:书写人生 时间:2019-09-11 20:24:17 0 删除 编辑

一、什么是Map

不同于 List 单列的线性结构, Java 中的 Map 提供的是一种双列映射的存储集合,它能够提供一对一的数据处理能力,双列中的第一列我们称为 key ,第二列就是 value ,一个 key 只能够在一个 Map 中出现最多一次,通过一个 key 能够获取 Map 中唯一一个与之对应的 value 值,正是它的这种一对一映射的数据处理关系,在实际应用中可以通过一个 key 快速定位到对应的 value

Map 的三个特点:

  1. 包含键值对

  2. 键唯一

  3. 键对应的值唯一

二、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 循环效率更快一点。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69947338/viewspace-2656816/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-03

  • 博文量
    35
  • 访问量
    10605