【发布时间】:2014-06-26 08:56:25
【问题描述】:
我需要一个带有签名的HashMap
HashMap<Integer, Double> map;
但我封装了两个值,例如:
class CustomKV
{
Integer key;
Double value;
}
因此,Map<> 变为
Set<CustomKV> customMap;
如果我要使用Map,当我想对键进行迭代时,map.keySet() 就足够了。
但是,如果我使用第二个,我必须迭代 CustomKV 的对象,然后添加所有 keys,将它们添加到一个集合中,然后返回它。
我的问题是:Java 是否对此进行了优化?或者每次我调用keySet() 时,它会迭代对象吗?
编辑:
这里,我写下两次迭代的区别:
for(Integer i : map.keySet())
for(CustomKV kv : customMap())
似乎它们是相同的。但我要问的是,如果我继续打电话
for(CustomKV kv : customMap)
int key = kv.getKey();
它会减慢我的速度,还是 Java 会识别这一点并将customMap 视为地图?
【问题讨论】:
-
您要访问哪些值?使用 CustomKV 类而不是 Map 的原因是什么?
-
如果您使用自定义
Set,您会调用什么keySet()? -
@shmosel 我也会写一个自定义的
keySet()方法。 -
@MKorsch 我正在使用它来建模图中顶点的邻接列表。
-
为什么迭代
Set<CustomKV>比迭代Set<Integer>效率更高或更低?
标签: java map set time-complexity