Java的map的containsKey方法是如何实现的?不是也要遍历map的key和value里面的key才能知道是否包含吗?

Java:Map.containsKey()&的一个使用场景.
我们常常使用 Map 对象来缓存数据, 比较常见的处理流程是:
1. 调用 Map 的 get() 方法获取数据;
2. 如果返回不为 null, 直接返回该数据;
3. 如果返回为 null, 则生成数据, 或者从其他地方获取数据, 然后存放入 Map 中, 最后返回该数据.
这里, 我们可以通过使用 Map 的containsKey() 方法来检测是否数据是否存在, 如果key存在,
则表明已经获取过一次数据, 那么直接返回该 key 在 Map 中的值. 不管是否为 null 都直接返回; 如果 key 不存在,
则去生成或者获取数据, 并放入到 Map 中, 并返回该数据.
这里使用 containsKey() 来检测可以应用于: 1. 从其他对方获取的数据可能为空, 并且不会有变化; 2.
获取数据比较耗时. 这个场景下, 使用该方法可以大大降低消耗, 特别是在同步情况下.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1631人阅读
Java开发(114)

该方法判断Map集合对象中是否包含指定的键名。如果Map集合中包含指定的键名,则返回true,否则返回false。
语法& containsKey(Object key)&
key:是要查询的Map集合的键名对象。
典型应用& 本示例首先使用HashMap类创建Map集合对象,并向集合中添加几个元素,然后调用containsKey方法查询是否包含指定的键名。运行结果如图1.22所示。
本示例的关键代码如下:
public static void main(String[] args) {
&&Map map = new HashMap();&&&&&&&//定义Map对象
&&map.put(&apple&, &新鲜的苹果&);&&&&&&//向集合中添加对象
&&map.put(&computer&, &配置优良的计算机&);
&&map.put(&book&, &堆积成山的&);
&&map.put(&time&, new Date());&
&&String key = &book&;&
&&boolean contains = map.containsKey(key);&&&&//判断是否包含指定的键值
&&if (contains) {&&&&&&&&&//如果条件为真
&&&System.out.println(&在Map集合中包含键名& + key);&//输出信息
&&} else {
&&&System.out.println(&在Map集合中不包含键名& + key);
语法& containsValue(Object value)
value:要查询的Map集合的指定键值对象。
示例& 本示例首先使用HashMap类创建Map集合对象,并向集合中添加几个元素,然后调用containsValue方法查询是否包含指定的键值对象。
public static void main(String[] args) {
&&Map map = new HashMap();&&&&&//定义Map集合对象
&&map.put(&apple&, &新鲜的苹果&);&&&&//向对象添加元素&
&&map.put(&computer&, &配置优良的计算机&);
&&map.put(&book&, &堆积成山的&);
&&map.put(&time&, new Date());&
&&&Thread.sleep(1000); &&&&&//休眠1秒,使两个Date对象不相等
&&} catch (InterruptedException e) {
&&&e.printStackTrace();
&&Date value = new Date();&&&&&//创建日期时间对象
&&boolean contains = map.containsValue(value);&//判断集合中是否包含指定的value值
&&if (contains) {&&&&&&&//如果条件成立&
&&&System.out.println(&在Map集合中包含键值& + value);&//输出信息
&&&System.out.println(&在Map集合中不包含键值& + value);
运行结果如图1.23所示。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:147894次
积分:4959
积分:4959
排名:第4878名
原创:309篇
转载:287篇
评论:15条
阅读:1369
(2)(4)(1)(2)(1)(11)(13)(14)(24)(59)(83)(77)(67)(139)(103)(2)在Java中如何遍历Map对象
How to Iterate Over a Map in Java
在java中遍历Map有不少的方法。我们看一下最常用的方法及其优缺点。
既然java中的所有map都实现了Map接口,以下方法适用于任何map实现(HashMap, TreeMap, LinkedHashMap, Hashtable, 等等)
方法一 在for-each循环中使用entries来遍历
这是最常见的并且在大多数情况下也是最可取的遍历方式。在键值都需要时使用。
注意:for-each循环在java 5中被引入所以该方法只能应用于java 5或更高的版本中。如果你遍历的是一个空的map对象,for-each循环将抛出NullPointerException,因此在遍历前你总是应该检查空引用。
方法二 在for-each循环中遍历keys或values。
如果只需要map中的键或者值,你可以通过keySet或values来实现遍历,而不是用entrySet。
该方法比entrySet遍历在性能上稍好(快了10%),而且代码更加干净。
方法三使用Iterator遍历
使用泛型:
不使用泛型:
你也可以在keySet和values上应用同样的方法。
该种方式看起来冗余却有其优点所在。首先,在老版本java中这是惟一遍历map的方式。另一个好处是,你可以在遍历时调用iterator.remove()来删除entries,另两个方法则不能。根据javadoc的说明,如果在for-each遍历中尝试使用此方法,结果是不可预测的。
从性能方面看,该方法类同于for-each遍历(即方法二)的性能。
方法四、通过键找值遍历(效率低)
作为方法一的替代,这个代码看上去更加干净;但实际上它相当慢且无效率。因为从键取值是耗时的操作(与方法一相比,在不同的Map实现中该方法慢了20%~200%)。如果你安装了FindBugs,它会做出检查并警告你关于哪些是低效率的遍历。所以尽量避免使用。
如果仅需要键(keys)或值(values)使用方法二。如果你使用的语言版本低于java 5,或是打算在遍历时删除entries,必须使用方法三。否则使用方法一(键值都要)。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:657777次
积分:6841
积分:6841
排名:第2865名
原创:45篇
转载:389篇
评论:82条
(6)(2)(1)(5)(4)(1)(4)(13)(11)(11)(16)(30)(8)(7)(4)(11)(13)(11)(14)(8)(10)(2)(33)(14)(9)(15)(24)(3)(1)(1)(1)(5)(3)(7)(14)(7)(8)(1)(3)(5)(17)(3)(15)(6)(6)(16)(11)(1)(19)(4)

我要回帖

更多关于 map containskey 的文章

 

随机推荐