如何创建一个从0到Long范围的大循环?

时间:2018-07-21 18:55:47

标签: java

下面给出的代码需要花费大量时间来执行代码正确答案

for(long i=0;i<9223372036854775807;i++){
   //code
}

有人可以告诉我此版本的其他替代方法或更正吗?

3 个答案:

答案 0 :(得分:2)

来自此答案https://stackoverflow.com/a/15505663/7806805 既然你的问题是

  

下面给出的代码需要花费大量时间来执行代码正确答案

如果您每纳秒执行一次功能,根据此消息来源,仍然需要292年的时间才能遇到这种情况。

因此花费时间很自然

答案 1 :(得分:2)

您可以进行的一项更改是改用常量Long.MAX_VALUE。

但是不要期望这会改变任何东西。该循环仍然需要花费所有时间来迭代该范围。

换句话说:您如何表达“我想将2迭代到63的1的幂”次并不影响这样做的时间。

减少运行时间的唯一方法是对范围进行切片,并使多个较小的循环并行进行。但是,当然:在循环体上没有任何细节,因此无法确定并行性是否适用。

当然,真正的问题将是您打算通过迭代数百万亿亿年的代码来解决的实际问题。

答案 2 :(得分:-1)

我建议使用Long.MAX_VALUE作为循环绑定:

for(long i=0L;i<Long.MAX_VALUE;i++){
//code
  }