2015-08-24 34 views
17

当我只想设置'if'语句时,这两个语句之间是否有区别?map.keySet()。contains()和map.containsKey()之间的差异

// it is a HashMap 

if (map.keySet().contains(myKey)) { //do something...} 

if (map.containsKey(myKey)){ //do the same thing...} 
+2

这让非常小的速度差,虽然为[阿图罗(http://stackoverflow.com/a/32173684/2071828)点可能会有一些。第一行的主要缺点是它是_confusing_ - 其他开发人员会想知道为什么**您使用了非标准构造。 –

回答

16

containsKey()更快。 keySet()返回一个由HashMap本身支持的集合,其方法调用containsKey()

这是它的实现:

public final boolean contains(Object o) { return containsKey(o); } 

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/HashMap.java#913

+1

我认为'containsKey'可能会更快,但是当唯一的区别是通过简单的方法调用进行一个额外的间接层时,性能差异就会变得微不足道。 –

+2

@AlexisKing除非需要构造'keySet';这将是第一次这种方法被称为... –

+1

@BoristheSpider真,但分配将是微小的,因为'KeySet'是一个非静态的内部类,所以不需要做实际的初始化。 –

相关问题