java - 我应该采用哪种方法来实现这两个 move() 函数?

标签 java algorithm

我正在编写一个小型模拟程序,其中有一个 void move(int n) 函数和一个 void move() 函数。顾名思义,move(int n) 一次进行 n 次移动,而 move() 只进行一次移动。

现在我想到了两种实现它们的方法。方法一是:

public void move()
{
  // make one move
}

public void move(int n)
{
  for (int i=0;i<n;i++)
  {
    move();
  }
}

方法 2:

public void move(int n)
{
  for (int i=0;i<n;i++)
  {
    // make one move
  }
}

public void move()
{
  move(1);
}

显然,当移动次数较多时,方法 2 具有时间效率优势,因为我们不需要每次移动时都进行单独的函数调用。然而,由于现在每个 Action 的实现都是在 for 循环中实现的,因此稍后更改实现(例如从每个 Action 中获取元数据或分析数据)似乎不具有良好的模块化性。在一次进行多个单一移动的情况下,方法 2 需要额外的函数调用和额外的循环设置。

假设我们不知道 future 的特定用例,我应该如何决定采用哪种方法?

最佳答案

实际上,一个好的 JVM 应该使它们相当等效(主要是内联,请参阅 this answer );相反,您应该专注于可读代码,这无疑使第一个代码更可取。如果这真的很重要,我建议尝试使用随机用例来分析您的代码(例如所有单个移动、所有大量移动、混合);您可能必须做出一些您认为最有可能的定性决策,并且请记住,如果您正在编写可能被移植的代码,那么它将依赖于实现。

关于java - 我应该采用哪种方法来实现这两个 move() 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909073/

相关文章:

algorithm - 实现约翰逊算法以在图中查找基本电路(循环)

algorithm - 将绝对差值插入数组后,找到数组中第 k 大的元素

java - 如何使用背包找到下料问题的最佳组合

algorithm - 粒子群优化算法中的粒子

java - 如何在 WildFly 上升级 Artemis

java - synchronized 关键字给出了预期的输出,但对不同线程调用该方法的顺序不满意

具有参数化类型的 Java getConstructor(types)

java - 运行react-native run-android时出现错误 react native

java - AES 加密 - 以后如何解密加密的字符串?

algorithm - 最简单(和正确)的转义算法是什么?