我想使用循环在每个元素中存储一个随机数。有一个更好的方法吗?我需要随机数字来测试我的种类和时间。如何填充100,000,000元素数组?
回答
一个简单的伪代码:
int[] random = new int[10000000];
for (int i = 0; i < random.length; i++) {
random[i] = generateAbsoluteRandom();
}
这就是我想到的 – Strawberry
每次都需要不同的随机设置吗?如果没有,则生成一个您需要的大小的随机数组,并将其序列化并存储。在需要时加载它。这可能会跑得更快。
简单的方法将是最好的:
- 分配大阵
- 对于每个元素
- 生成随机数
- 分配给元素。
瓶颈将是随机数发生器的通话,你不能避免这些...如果你想的随机数。
只需以简单的方式编写代码,并让JIT编译器担心优化它。只有在分析应用程序时才会发现应用程序的这一部分是一个重要的性能问题。
你可以随时去多线程。数组的大小应该保证创建线程的成本。
import java.util.Random;
public class SimpleTest implements Runnable {
public static int[] array = new int[1000];
private int startPoint;
public SimpleTest(int startPoint) {
this.startPoint = startPoint;
}
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Thread test1 = new Thread(new SimpleTest(0));
Thread test2 = new Thread(new SimpleTest(1));
test1.start(); test2.start();
while(test1.isAlive() || test2.isAlive()) {
Thread.sleep(10);
System.out.println("Waiting...");
}
System.out.println("Done!");
}
public void run() {
Random r = new Random();
for (int i = startPoint; i < array.length; i+=2) {
array[i] = r.nextInt();
System.out.println("Thread "+(startPoint+1)+" has put a value no. "+i+" and it was: "+array[i]);
}
}
}
编辑 嗯,我检查了执行时间,并有我的双包芯机上没有改善。看来数组的大小不保证创建线程的成本,或者我在这里丢失了别的东西。
EDIT2 当我在8个线程分割它(; P)的改进是相当大的 - 我去了形式开始〜3900ms到〜2500。有这东西...
为什么你需要存储的价值?如果设置种子值,则会从随机获得相同的值序列。
随机r =随机(856007); //或任何数字来识别给定序列
n = r.nextInt();
为了测试的目的,例如,测试运行排序算法的时间。 – Strawberry
我没有费心去检验这是否是一个实际的加速,但你可以考虑做正确的大小(4个字节* 100000000元)的ByteBuffer
,然后用Random.nextBytes填充它。从那里,打电话给asIntBuffer,你会得到一个充满整数的缓冲区。
我已经证明这不是更快,也不会影响你的结果分布 - 但如果你实际上正在寻找速度,你可以尝试一下。
- 1. 使用数组元素填充GridBagLayout
- 2. python填充数组中的元素
- 3. 如何通过JTable列元素填充一组元素?
- 4. Javascript/jQuery填充多维数组...数组与数组元素
- 5. Jquery AutoComplete:如何使用DOM元素填充源数组?
- 6. 如何删除元素时填充数组空隙?
- 7. 如何填充数组缺失的元素?
- 8. 用Java中另一个数组的元素填充数组
- 9. 使用数组的元素填充另一个数组 - Java
- 10. 如何使用forEach填充HTML元素
- 11. 如何使元素填充表格行
- 12. 如何动画填充html元素
- 13. 如何填充XML中的子元素?
- 14. 如何在json中填充空元素
- 15. 如何填充v8数组?
- 16. jquery如何填充数组
- 17. 使用另一个元组中的元素填充元组
- 18. 使用数组元素填充VBA中的组合框
- 19. 如何在伪元素之前忽略元素填充?
- 20. 如何覆盖子元素的父元素的填充
- 21. 如何为左侧的元素填充父元素
- 22. 一次填充2个数据行的数组元素
- 23. Vuejs使用整数数组填充select元素
- 24. QML填充父元素
- 25. 填充身体元素
- 26. 内联元素的填充
- 27. UL元素忽略填充
- 28. bootstrap,在元素中填充
- 29. XmlSerializer不填充子元素
- 30. 填充选择元素
我真的不知道还有什么其他的选择;如果你需要100,000,000个随机数,你需要100,000,000个随机数。虽然我会措辞它“...使用循环来存储每个随机数...” –
我相信你会最终成为在这个程序中的性能打击:(想想你设置的数据在然后在每个元素上运行比较,最后更新数组,最后只需担心后面的问题 –
只需用标准方式来做就可以了100000000这些日子并不那么大 – starblue