看到csdn问答中有人问了一个问题,,百万级的Integer数组,进行分批删除,每次删除一定数量的数据,就顺手写了个小程序,,熟读还是ms级的,但是一般情况下应该不会给你一大串数据让你获取处理的,,毕竟数据量大处理的时间也会相应的延长……
package com.myk.utils.test;
import java.time.Clock;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class ArrayUtils {
public static void main(String[] args) {
int arraySize = 1000000;
int splitSize = 1000;
Integer[] ids = new Integer[arraySize];
long time1 = Clock.systemUTC().millis();
for(int i = 0 ; i < arraySize ; i++) {
ids[i] = i;
}
batchRemoveArray(ids, splitSize);
long time2 = Clock.systemUTC().millis();
System.err.println("程序运行时间:"+(time2-time1));//程序运行时间在 15ms 左右
}
/**
* 批量移除数组数据
* @param integerArray:需要操作的数组
* @param removeSize:一次移除多少
*/
private static void batchRemoveArray(Integer[] integerArray, int removeSize) {
List<Integer> idsList = new ArrayList<>(Arrays.asList(integerArray));//将数组转换为list列表
//分块
int listSize = idsList.size();
int forSize = listSize/removeSize;//至少要循环几次
int forSizeClind = listSize%removeSize;//剩下的长度(不为0,则说明还有值,多加一次循环)
int xunhuancishu = forSize;
if(forSizeClind != 0) {//判断应该循环多少次
xunhuancishu += 1;
}
int currentSize = 0;
//时间复杂度O(xunhuancishu)
//平均运行时间为 1ms 左右
long time4 = Clock.systemUTC().millis();
// idsList.clear();//使用这个清除比批量删除还要慢些
for(int i = 0 ; i < xunhuancishu ; i++) {
if(i < forSize) {
idsList = idsList.subList(removeSize, listSize - currentSize);
currentSize += removeSize;
}else {
idsList = idsList.subList(forSizeClind, forSizeClind+1);//只要进来这里说明已经结束了
}
// System.out.println(idsList.size());//打印耗时在 10ms 左右
}
long time5 = Clock.systemUTC().millis();
System.err.println(time5 - time4);
}
}