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

相关文章
|
23天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
52 5
|
22天前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
18 3
|
23天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
22天前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
19 1
|
23天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
21 2
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
22 3
|
1月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
35 0
|
6月前
|
前端开发 Java
java前端:删除数组中指定元素的方法
java前端:删除数组中指定元素的方法
109 1
|
3月前
|
Java 索引
Java系列 之 Java复制(拷贝)数组的4种方法:arraycopy()方法、clone() 方法、copyOf()和copyOfRan
这篇文章介绍了Java中数组复制的四种方法:`Arrays.copyOf()`、`Arrays.copyOfRange()`、`System.arraycopy()`和`clone()`方法,以及它们的使用场景和示例代码。