写在前面:
这是根据上一篇文章 用 int 来储存 boolean 数组 代码 想到的... 然后去测试了一下速度,发现确实能快一点
一般方法:
重复调用 random.nextInt(2);
,然后保存到一个二维数组里面
新方法:
随机生成 int 取其 bit 位,只需随机生成(二维数组元素个数/32)个 int 数就好了
代码:
package com.wx.zxing.RandomIntArray;
import java.util.Random;
public class RandomIntArrayTest {
public static void main(String[] args) {
int LWidthNum = 20000;
int LHeightNum = 20000;
Random random = new Random();
int test = 0;
long start = System.currentTimeMillis();
int[][] input = new int[LWidthNum][LHeightNum];
for (int i = 0; i < input.length; i++){
for (int j = 0; j < input[0].length; j++){
input[i][j] = random.nextInt(2);
}
}
// 模拟使用
for (int i = 0; i < input.length; i++){
for (int j = 0; j < input[0].length; j++){
test = input[i][j];
}
}
long end = System.currentTimeMillis();
System.out.println("一般方法时间:" + (end - start));
long start1 = System.currentTimeMillis();
int length = LHeightNum * LWidthNum;
int num = (length / 32) + 1;
int[] temp = new int[num];
for (int j = 0; j < num; j++){
temp[j] = random.nextInt(Integer.MAX_VALUE);
}
// 模拟使用
int size = 0;
for (int i = 0; i < LWidthNum; i++){
for (int j = 0; j < LHeightNum; j++){
test = ((temp[size / 32] & (1 << ( size & 0x1F))) != 0 ? 1 : 0);
size++;
}
}
long end1 = System.currentTimeMillis();
System.out.println("新方法时间:" + (end1 - start1));
}
}
运行结果:
结果并不是恒定的,但是基本都是新方法要快一点
新方法优缺点:
①、生成足够快,使用的时候也可以快速取出来
②、但是可视化读特别差,就是不能直观的看到数组里面的值
③、不能对里面的值做操作,相当于添加了只读属性 ┓( ´-` )┏