在java中将数组拆分为两个部分,而不是for循环

Vin*_*rya 38 java arrays

我有一个300000的数组,我希望它将它分成两个相等的部分.有没有什么方法可以用来实现这个目标?

它会比for-loop操作更快还是会对性能没有影响?

Mar*_*aux 58

你可以用System.arraycopy().

int[] source = new int[1000];

int[] part1 = new int[500];
int[] part2 = new int[500];

//              (src   , src-offset  , dest , offset, count)
System.arraycopy(source, 0           , part1, 0     , part1.length);
System.arraycopy(source, part1.length, part2, 0     , part2.length);
Run Code Online (Sandbox Code Playgroud)

  • @Joachim`Arrays.copyOf()`和`Arrays.copyOfRange()`也只是`System.arrayCopy()`的包装器.他们只是有一个更漂亮的调用语法并做一些基本的验证,就是这样 (5认同)
  • 使用[`Arrays.copyOf()`](http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOf(int [],%20int))和[` Arrays.copyOfRange()`](http://download.oracle.com/javase/6/docs/api/java/util/Arrays.html#copyOfRange(int [],%20int,%20int))可能略有更快(但肯定会更短的代码;-)). (2认同)

Pet*_*ete 51

copyOfRange

这样做你想要的,而不必创建一个新的数组,因为它返回一个新的数组.

int[] original = new int[300000];
int[] firstHalf = Arrays.copyOfRange(original, 0, original.length/2);
Run Code Online (Sandbox Code Playgroud)


dig*_*ggi 8

在具有固定最大大小的多个阵列中拆分数组.

public static <T extends Object> List<T[]> splitArray(T[] array, int max){

  int x = array.length / max;
  int r = (array.length % max); // remainder

  int lower = 0;
  int upper = 0;

  List<T[]> list = new ArrayList<T[]>();

  int i=0;

  for(i=0; i<x; i++){

    upper += max;

    list.add(Arrays.copyOfRange(array, lower, upper));

    lower = upper;
  }

  if(r > 0){

    list.add(Arrays.copyOfRange(array, lower, (lower + r)));

  }

  return list;
}
Run Code Online (Sandbox Code Playgroud)

示例 - 11的数组应分成多个不超过5的数组:

// create and populate an array
Integer[] arr = new Integer[11];

for(int i=0; i<arr.length; i++){
  arr[i] = i;
}

// split into pieces with a max. size of 5
List<Integer[]> list = ArrayUtil.splitArray(arr, 5);

// check
for(int i=0; i<list.size(); i++){

  System.out.println("Array " + i);

  for(int j=0; j<list.get(i).length; j++){
    System.out.println("  " + list.get(i)[j]);
  }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Array 0
  0
  1
  2
  3
  4
Array 1
  5
  6
  7
  8
  9
Array 2
  10
Run Code Online (Sandbox Code Playgroud)