java - 在迭代时使用 'if' 条件查找项目与使用 get(key),当你已经需要迭代时

标签 java algorithm

我已经迭代了几个 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/

相关文章:

java - 在一次采访中有人问我如何检测 Java 中的内存泄漏?

JavaScript 确保所有数字都是唯一的,如果不是加一(或更多)

c# - C# 中的 Char.IsHex()

algorithm - 查找单词组合的最佳算法?

java - 当变量可以为空时查询表

java - JSONWithPadding 中缺少分号

c - 如何生成 CORDIC 的 K 值序列?

python - 计算多变量函数在 Python 中的间隔之间取值的有效方法

java - 修复两个整数的 GCD

java - 在 Android 中制作三秒计时器的最简单方法是什么?