java List数组根据给定大小分割数组

简介: 在获取到很长的数组时,一次性处理数据量太大,需要分批处理,这就需要分批处理了。1、使用List的subList,封装方法2、google工具类型Lists的partition经测试个人推荐使用第一种方法,效率上快了10几倍,估计是因为没有重新生成数组的原因

直接上代码:
1、使用List的subList,封装方法
第一个方法是针对Integer的List
第二个方法是适合所有对象的,经测试第二个方法给第一个方法快很多,好像不用时间一样。

/*****
     * 
     * @param dataList
     * @return 如果输入的数据列表为空,则返回一个空的数组。如果传分割的大小小于或者等于0,则会将传的数组放在数组第一个元素返回
     */
    public static List<List<Integer>> myListPartition(List<Integer> dataList,int splitSize){
   
        if(dataList == null || dataList.isEmpty()) {
   
            return new ArrayList<>();
        }
        List<List<Integer>> resList = new ArrayList<>();
        if(splitSize <= 0) {
   
            resList.add(dataList);
            return resList;
        }
        int dataSize = dataList.size();
        for(int i=0;i<dataSize;i += splitSize) {
   
            int end = Math.min(i + splitSize, dataSize);
            resList.add(dataList.subList(i, end));
        }
        return resList;
    }
    /***
     * 
     * @param dataList
     * @param splitSize
     * @return 跟上面的方法一样,这里写一个通用类型的
     */
    public static <T> List<List<T>> myListPartitionFormat(List<T> dataList,int splitSize){
   
        if(dataList == null || dataList.isEmpty()) {
   
            return new ArrayList<>();
        }
        List<List<T>> resList = new ArrayList<>();
        if(splitSize <= 0) {
   
            resList.add(dataList);
            return resList;
        }
        int dataSize = dataList.size();
        for(int i=0;i<dataSize;i += splitSize) {
   
            int end = Math.min(i + splitSize, dataSize);
            resList.add(dataList.subList(i, end));
        }
        return resList;
    }

二、google工具类型Lists的partition
先导入架包

     <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>21.0</version>
    </dependency>

使用:

import com.google.common.collect.Lists;
List<List<Integer>> resList1 = Lists.partition(testList, 33);

测试结果:
1万条数据:
//Integer
Time : 2.0
Size : 3031
//google
Time : 39.0
Size : 3031
//T
Time : 1.0
Size : 3031

相关文章
|
3天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
4天前
|
存储 Java 索引
Java基础(六):数组
Java基础(六):数组
Java基础(六):数组
|
2天前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
27 12
|
3月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
77 5
|
3月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
76 3
|
3月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
42 4
|
3月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
39 1
|
3月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
52 2
|
Java Apache
Java 中 List 分片的 5 种方法!(5)
Java 中 List 分片的 5 种方法!(5)
326 0
Java 中 List 分片的 5 种方法!(5)
|
Java
Java 中 List 分片的 5 种方法!(4)
Java 中 List 分片的 5 种方法!(4)
453 0
Java 中 List 分片的 5 种方法!(4)