关于java快速生成顺序1-1000的数组/多维数组/集合的讨论

在算法里面,经常会遇到需要初始化数组的题目。
我就在想除了for遍历还能有哪些可以快速生成1,2,3---1000这样的数组。
先说结论,对于基本数组来说还是for最快。
但是对于集合来说就不一定了。

例外:
我查到还有着第三方包速度很快,像eclipseCollections 对集合的处理速度很快,不过由于学习成本的问题,这里不进行讨论。


本来应该写在最后的:不过有的人应该只看结论就提前了。
对于数组来说,就用for就好,如果对效率要求没那么高intstream写起来很舒服,效率也差不到多少。
对于集合来说,instream会更快,如果知道容量的话for也不差,不知道的话会差很多。

对于stream基本流来说,无论是数组还是集合,效率都差不多。也都比较慢。

平时的话我会推荐intstream,有提示写起来比较舒服。

一维数组

for遍历

很好理解就是

for (int j = 0; j < n;a[j] = j,j++);

Stream流

Stream

Object[] objects = Stream.iterate(1, i -> i < n, i -> i + 1).toArray();

IntStream

int[] a = IntStream.rangeClosed(1, n).toArray();

效率

模式10000平均时间100000平均时间
for7986.27879757.494
intstream8645.85575615.701
stream53950.274498647.562

二位数组

for

        int[][] a = new int[3][n+1];
        for (int i = 0; i < 3;i++)
            for (int j = 0; j < n;j++,a[i][j] = j);

ArraysCopy

        int[][] a = new int[3][n+1];
        for (int i = 0; i < n;i++,a[0][i] = i);
        for (int i = 1; i < 3; i++) {
            a[i] = Arrays.copyOf(a[0], n);
        }

效率

模式10000平均时间100000平均时间
for22579.664216966.408
copy26174.465320343.790

集合

for

        ArrayList<Integer> a = new ArrayList<>(n);
        for (int i = 0; i < n; a.add(i),i++) ;

stream

List<Integer> list = Stream.iterate(1, i -> i < n, i -> i + 1).toList();

intStream

List<Integer> list = IntStream.rangeClosed(1, n).boxed().toList();

效率

模式10000平均时间100000平均时间
intstream34971.503392437.797
for37548.544421568.481
for不知道容量43829.615
stream51799.554494847.233
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小余

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值