gpt4 book ai didi

java - for/break 比 iterator().next() 更高效吗?

转载 作者:行者123 更新时间:2023-12-01 18:29:45 24 4
gpt4 key购买 nike

众所周知,mapX 中有一个条目。代码度量工具提示在 for 循环中使用“break”,但通常情况下,在这么小的循环中,我会让它通过。但在这种情况下,已知只有一个条目,我不确定哪个更有效。

那么,当您知道 map 只会包含一个元素时,以下哪一项更有效?

可能的替代品:

Map.Entry<String,String> e = mapX.entrySet().iterator().next();
Y.setMsg(e.getValue());
Y.setMsgKey(e.getKey());

原始代码:

for (String key : mapX.keySet()){
Y.setMsg(mapX.get(key));
Y.setMsgKey(key);
break;
}

最佳答案

第一个版本比第二个版本更快(使用“for”循环/“break”):

  1. 循环版本必须在调用 next() 之前调用 hasNext()
  2. 循环版本是迭代keySet而不是entryset,因此必须进行额外的映射查找才能获取相应的值。
  3. 循环版本可能在break处有一个额外的分支指令...尽管这是次要的,并且可能被JIT编译器优化掉。

但是使用第一个版本(IMO)的最好的理由是代码更容易理解/不太复杂。 (代码度量工具在这种情况下很有帮助......)

<小时/>

当然,另一方面是,如果映射为空,则代码的非循环版本将引发异常。如果需要处理“空 map ”的情况,应该这样写:

if (!mapX.isEmpty()) {
Map.Entry<String,String> e = mapX.entrySet().iterator().next();
y.setMsg(e.getValue());
y.setMsgKey(e.getKey());
}

关于java - for/break 比 iterator().next() 更高效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24791365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com