生成随机0、1矩阵

2017-12-05  本文已影响0人  steamed_bun

写在前面:
       这是根据上一篇文章 用 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));
    }
}

运行结果:
结果并不是恒定的,但是基本都是新方法要快一点

数组大小为(20000 * 20000)的运行结果.png 数组大小为(200 * 100)的运行结果.png

新方法优缺点:
①、生成足够快,使用的时候也可以快速取出来
②、但是可视化读特别差,就是不能直观的看到数组里面的值
③、不能对里面的值做操作,相当于添加了只读属性   ┓( ´-` )┏

上一篇下一篇

猜你喜欢

热点阅读