首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >映射的keySet()和entrySet()的性能考虑

映射的keySet()和entrySet()的性能考虑
EN

Stack Overflow用户
提问于 2010-10-06 14:49:20
回答 2查看 58.8K关注 0票数 78

全,

谁能让我确切地知道两者之间的性能问题是什么?站点:CodeRanch提供了使用keySet()和get()时所需的内部调用的简要概述。但是,如果有人能在使用keySet()和get()方法时提供有关流的确切详细信息,那就太好了。这将帮助我更好地理解性能问题。

EN

回答 2

Stack Overflow用户

发布于 2010-10-06 14:56:37

使用entrySet比使用keySet更好的最常见的情况是,当您迭代映射中的所有键/值对时。

这样效率更高:

代码语言:javascript
复制
for (Map.Entry entry : map.entrySet()) {
    Object key = entry.getKey();
    Object value = entry.getValue();
}

比:

代码语言:javascript
复制
for (Object key : map.keySet()) {
    Object value = map.get(key);
}

因为在第二种情况下,对于keySet中的每个键,都会调用map.get()方法,在HashMap的情况下,它需要计算key对象的hashCode()equals()方法,以便找到相关的值*。在第一种情况下,消除了额外的工作。

编辑:如果您考虑一个TreeMap,其中对get的调用是O( log2 (n ) ),即will的比较器可能需要运行log2(N)次(n=映射的大小)才能找到关联值,则情况会更糟。

*一些映射实现具有内部优化,在调用hashCode()equals()之前检查对象的身份。

票数 76
EN

Stack Overflow用户

发布于 2011-08-03 22:05:19

Here is the link to an article比较entrySet()keySet()values()的性能,以及关于何时使用每种方法的建议。

显然,只要不需要对值执行Map.get()操作,使用keySet()就比使用entrySet()更快(而且更方便)。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3870064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档