如何加快 Java 中大型集合的处理

本文探讨如何优化Java中大型集合的处理,通过并行流和三种并行策略(子列表分区、浅分区、基于数组的浅分区)对比,展示性能提升效果。实验表明,基于数组的浅分区策略在处理大量数据时能显著减少CPU时间,最高加速比可达4.4倍。
摘要由CSDN通过智能技术生成

 

如何加快 Java 中大型集合的处理

作者:java后端架构

  • 2022-10-27

    湖南

  • 本文字数:4596 字

    阅读完需:约 15 分钟

Java 8 的并行流是改进大型集合处理的直接方法。本文在此基础上介绍了三种不同的改进算法,并通过比较,给出了能够带来更优越性能的方法。

和许多其他编程语言类似,Java 拥有一组数据结构对象,可以被用来表示某些单个单元,及其可以执行的一组操作。从处理大数据量的计算程序来看,其典型操作会涉及到对每个对象进行转换等各种集合。在本文中,我们将借用 ETL(提取、转换和加载)的基本概念,将提取/捕获到的数据从原来的形式,转换为指定的形式,以便将其存放到另一个数据库中。当然,我们会在此讲述数据库元素的转换、抽象操作的概念,以便你更好地理解集合处理的本质。

1.基础知识

从 Java 1.2 开始,我们便主要依赖于作为集合层级结构的 java.util.Collection 根接口。而在 Java 7 发布之前,能够显著提升大型集合的处理性能的唯一方法是:并行化操作。不过,随着 Java 8 的出现,新的 java.util.stream 包提供了支持元素流进行功能性样式(functional-style)操作的 Stream API。Stream API 通过被集成到 Collections API 中,可以对集合进行诸如顺序或并行的 map-reduce 转换等批量操作。

从那时起,Java 便提供了一种原生的方式,来尝试着改进应用于集合的转换操作的并行化性能。之所以被称为是一种“尝试”的策略,其原因在于它只是简单地使用了并行流式操作,并不能保证一定会有更好的性能。毕竟其他潜在的因素也可能产生影响。尽管如此,并行流提供了寻求改进处理性能的一个思路和起点。

下面,我将对一个大型的 Java 集合采用简单的转换操作,比较原生的顺序和并行处理、以及三种基于其他算法的并行流策略,在性能上的优劣。

2.转换操作

针对转换操作,我们定义了一个功能性的接口。如下面的代码段所示,你只需要将一个 R 类型的元素,应用到变换操作上,便可返回一个 S 类型的变换对象。

Java

@FunctionalInterfacepublic interface ElementConverter<R, S> {
  S apply(R param);}

复制代码

该操作旨在将一个作为参数提供的字符串,转换为大写字母的形式。下面的两个代码段分别创建了两个 ElementConverter 接口的实现。其中的一个是将某个字符串转换为大写字符串:

Java

public class UpperCaseConverter implements ElementConverter<String, String> {
  @Overridepublic String apply(String param) {
  return param.toUpperCase();}}

复制代码

另一个是对集合执行相同的操作:

Java

public class CollectionUpperCaseConverter implements ElementConverter<List<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值