1. 程式人生 > >使用列表刪除的方式處理百萬級陣列的資料

使用列表刪除的方式處理百萬級陣列的資料

看到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); } }