加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 针对多个谓词扫描一次数组或针对单个谓词多次扫描数组是

发布时间:2020-12-15 08:25:37 所属栏目:Java 来源:网络整理
导读:我有一个包含1000个元素的int数组.我需要提取数组中各种子群的大小(有多少是偶数,奇数,大于500等). 我可以使用for循环和一堆if语句来尝试为每个匹配项添加计数变量,例如: for(int i = 0; i someArray.length i++) { if(conditionA) sizeA++; if(conditionB)
我有一个包含1000个元素的int数组.我需要提取数组中各种子群的大小(有多少是偶数,奇数,大于500等).

我可以使用for循环和一堆if语句来尝试为每个匹配项添加计数变量,例如:

for(int i = 0; i < someArray.length i++) {
    if(conditionA) sizeA++;
    if(conditionB) sizeB++;
    if(conditionC) sizeC++;
    ...
}

或者我可以做一些更懒惰的事情,例如:

Supplier<IntStream> ease = () -> Arrays.stream(someArray);
int sizeA = ease.get().filter(conditionA).toArray.length;
int sizeB = ease.get().filter(conditionB).toArray.length;
int sizeC = ease.get().filter(conditionC).toArray.length;
...

以第二种方式实现这一目标的好处似乎仅限于可读性,但效率是否会受到巨大冲击?它可能更有效率吗?我猜它归结为迭代数组一次,4个条件总是好于每次迭代4次,每次一个条件(假设条件是独立的).我知道这个特殊的例子,第二种方法有很多额外的方法调用,我肯定不会提高效率.

解决方法

前言:

>正如@Kayaman指出的那样,对于一个小阵列(1000个元素),它可能并不重要.
>正确处理此类事情的方法是在完成工作代码和工作基准测试后进行优化,然后在分析代码后查看真正的热点位置.

但是假设这值得花费在优化上,第一??个版本可能比第二个版本更快,原因有两个:

>递增和测试索引的开销仅在第一个版本中产生一次而在第二个版本中产生三次.>对于太大而无法放入内存缓存的数组,第一个版本将比第二个版本需要更少的内存读取.由于内存访问通常是一个瓶颈(特别是在多核机器上),这可能很重要.>与简单的数组迭代相比,Streams会增加额外的性能开销.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读