Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 此方法比Math.random()快吗?_Java_Android_Optimization_Math_Random - Fatal编程技术网

Java 此方法比Math.random()快吗?

Java 此方法比Math.random()快吗?,java,android,optimization,math,random,Java,Android,Optimization,Math,Random,我是一名初学者,目前已经开始为Android开发一款使用粒子群优化算法的游戏。我现在正在尝试优化我的代码,我在for循环中有很多Math.random(),它几乎一直在运行。所以我在想一种方法,绕过所有的Math.random()调用 通过使用这样的方法: float random[] = new float[100]; static int randomIndex=0; private float myRandom(){ if(randomIndex >= 99)

我是一名初学者,目前已经开始为Android开发一款使用粒子群优化算法的游戏。我现在正在尝试优化我的代码,我在for循环中有很多Math.random(),它几乎一直在运行。所以我在想一种方法,绕过所有的Math.random()调用

通过使用这样的方法:

    float random[] = new float[100];
static int randomIndex=0;

private float myRandom(){
    if(randomIndex >= 99)
        randomIndex = 0;
    else
        randomIndex = randomIndex+1;
    return random[randomIndex];
}
…并在活动开始时执行此操作一次:

for (int i=0; i< 100; i++)
        random[i]=(float) Math.random();
for(int i=0;i<100;i++)
random[i]=(float)Math.random();
我的问题是,这是否比使用Math.random()更好(更快)?有人有更好的建议吗


我还想知道是否有人知道任何好的网站,在那里我可以阅读更多关于如何编写高效java/android代码的内容。恐怕我有点喜欢它。

学会相信Java API:它功能强大,速度快。“过早优化是万恶之源。”在你开始担心这类事情之前,让你的程序工作起来

然而,出于您的目的,在一个3000万的循环中比较您的方法和Java的方法,然后比较时间,可能会让您放心


更不用说填充一个由100个随机数组成的数组,然后使用它100万次根本不是随机的。

这肯定会更快,但不会“更好”,因为它不会生成非常好的随机数。也许这对你的游戏来说没问题;也许不是

java.util.Random
的实现中有一些可能是快速的。你可以去图书馆看看,但肯定还有其他图书馆。unmons有“XORShiftRNG”,它的设计目的是快速


小心不要做任何过早的优化:如果
Math.random
在实践中足够快,那么不要费心寻找替代品。只有在对代码中该部分实际花费的时间做了一些分析之后,才能做出这个决定。

这里有一篇关于优化的文章

你说的是为你的随机数做一个查找表。大多数情况下,这会更快,但在这种情况下,它也会改变结果

总的来说,我的方法总是找到花费时间最多的事情,并尽可能深入地调查它。确保你没有做多余的工作,并寻找那些看起来异常缓慢的事情。优化的代码往往将大部分时间花在基本的数学运算上。试着坚持下去,直到你把大部分时间都花在数学上

您的代码正在做一些事情,很可能有更好的方法来做到这一点。因此,请密切关注最佳算法


记住,有各种各样的安卓设备。很难对所有这些进行优化。有时,你必须在优化过程中做一个坚实的关卡,然后假设这是最好的,然后开始减少工作量,或者决定这是不可能的

非常感谢您的回答和链接!:)非常感谢,我喜欢快速反应!非常感谢你的回答!好的,所以我构建了一个严重依赖math.Random的应用程序,它比我想要的要慢(它是一个生成大量随机事件的负载测试工具)。我对它进行了分析,发现它大部分时间都在随机部分。然后呢?@om nom nom为什么不将随机创建移动到另一个线程,您可以使用阻塞队列来建立生产者/消费者关系卸载或甚至预加载随机数。