我已经迭代了几个 HashMap ,每个 HashMap 的大小为 20-40 个项目,因此在迭代或使用单个 时仅通过添加
操作 ?哪种方法会提供更多性能。 if
条件来查找项目是否更有意义get(key)
我知道要获得准确的结果,我应该依赖分析结果,但由于我对分析不太熟悉,因此需要专家意见。
编辑:
这是我的代码:
for (HColumn col : lobColumns) {// lobcolumns is a list but I also have hashmap already built containing same elements as this list
switch (ByteBufferToInt(col.getName())) {
case .......:
break;
case .......:
break;
case .......:
break;
case .......:
break;
case .......:
break;
}
if (ByteBufferToInt(col.getName()).intValue()==currentUserId()){// here is what I'm using as replacement for hashmap `get()`
.....
}
}
lobcolumns
是一个列表,但我也已经构建了 hashmap,其中包含与该列表相同的元素。这个列表/映射包含一些常量和一些变量对象,对于常量我使用 switch case 来进行高效查找和查找单个特殊变量项我需要决定是否使用 hashmap get()
或在已经迭代时使用 if
。
最佳答案
好吧,我的意思是让我们看看它。 get
操作是 O(1)
或在最坏情况下具有完美散列 函数的常数时间。而在最坏的情况下,迭代是 O(n)
。如果您提前获得了 key
,只需调用 get
即可,无需遍历所有内容。
更新
下面一行:
for (HColumn col : lobColumns)
您的评论是您已经将所有这些值存储在 HashMap
中。如果 map 是这样定义的:
Map<Integer, HColumn> columns = new HashMap<Integer,HColumn>();
if
语句移出 for 循环,变成如下:
HColumn column = columns.get(currentUserId());
if(null != column)
{
doSomethingWithColumn(column); // this was the old if block
}
for(Integer col : columns.keySet())
{
switch(col)
{
...
}
}
这减少了 if 只执行一次,因为它现在在 for
循环之外。
关于java - 在迭代时使用 'if' 条件查找项目与使用 get(key),当你已经需要迭代时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13239681/