0

考虑以下 Java 代码:

public void DoStuff(String[] strings, boolean preEval)
{
    final String compareTo = "A Somewhat Long String of Characters";

    for ( int i = 0; i < strings.length; ++i )
    {
         if ( preEval )
         {
              if( strings[i].equals(compareTo) )
              {
                  //do something process intensive
              }
         }

         //do something process intensive
    }

}

现在注意if (preEval)和那里面的内在陈述。如果使用的算法需要诸如 preEval 之类的条件,那么包含该preEval条件以用于代码优化是否有意义?

据我了解,评估条件标志是否解析为真或假比遍历字符集合并将该集合中的每个字符与来自不同集合的另一个对应字符进行比较要快得多。

我对汇编的了解大约是 30%,我想说的是所涉及的内部和操作码/助记符,因此我问这个问题的原因。

更新

注意:此处发布的代码与语言无关;我选择 Java 只是为了一些有形且易于阅读的东西,以及在程序员社区中广为人知的东西。

4

2 回答 2

1

我会说这在大多数情况下可能是一种优化。

也就是说,您不应该花时间优化尚未测量的代码。

例如,如果出现以下情况,这可能值得优化:

  • 您的大多数情况涉及很少的字符串或非常短的字符串。
  • 在调用函数之前计算preEval参数需要很长时间。

在实际情况下测量您的代码,确定您的瓶颈,然后进行优化。

于 2012-08-22T22:01:03.660 回答
0

一种成本较低的方法可能是使用 HashSet::contains(string) 方法来检查集合中是否存在字符串。您可能可以在使用字符串的 HashSet 或以字符串为键的 HashMap 进行迭代时设计掉字符串比较的需要。

我总是尝试使用 HashMap 来完全避免条件逻辑。

_瑞安

于 2012-08-22T21:36:50.310 回答