package org.shanbo.feluca.data2.util; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; public class CollectionUtil { public static Random random = new Random(); public static int[] shuffle(int[] array){ for (int i=0; i<array.length; i++) { int randomPosition = random.nextInt(array.length); int temp = array[i]; array[i] = array[randomPosition]; array[randomPosition] = temp; } return array; } public static void shuffle(long[] array, int startIndex, int endIndex){ assert (endIndex <= array.length && startIndex >= 0 && endIndex > 0); for (int i= startIndex; i<endIndex; i++) { int randomPosition = random.nextInt(endIndex - startIndex) + startIndex; long temp = array[i]; array[i] = array[randomPosition]; array[randomPosition] = temp; } } public static List<long[]> splitLongs(long[] offsetArray, int numPerBlock, boolean shuffled){ List<long[]> result = new ArrayList<long[]>(offsetArray.length / numPerBlock + 1); long[] tmp = Arrays.copyOf(offsetArray, offsetArray.length); if (shuffled){ CollectionUtil.shuffle(tmp, 0, tmp.length); } int i = 0; for( ; i < offsetArray.length / numPerBlock; i++){ result.add(Arrays.copyOfRange(tmp, i * numPerBlock, (i+1) * numPerBlock)); } if ( (i) * numPerBlock < tmp.length){ result.add(Arrays.copyOfRange(tmp, i * numPerBlock, tmp.length)); } return result; } }