在Java中只得到一个数组的一部分?

我在Java中有一个整数数组,我只想使用它的一部分。我知道在Python中,你可以这样做数组[index:],它从索引中返回数组。这在Java中是可能的吗?

504726 次浏览

Java中数组的长度是不可变的。因此,您需要将所需的部分复制到一个新数组中。
使用java.util.Arrays类中的copyOfRange方法:

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);

startIndex是要复制的范围的初始索引,包括 >是要复制的范围的最终索引,独占。(这个索引可以在数组之外)

例如:

   //index   0   1   2   3   4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2);          // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4);          // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)

是的,你可以使用Arrays.copyOfRange

它做的是同样的事情(注意有一个副本:你不改变初始数组)。

检查copyOfRange;例子:

int[] arr2 = Arrays.copyOfRange(arr,0,3);

您可以将数组包装为列表,并请求它的子列表。

MyClass[] array = ...;
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length);

如果使用Java 1.6或更高版本,可以使用Arrays.copyOfRange复制数组的一部分。来自javadoc:

将指定数组的指定范围复制到新数组中。范围(from)的初始索引必须在0到original.length之间,包括。original[from]处的值被放入副本的初始元素中(除非from == original.lengthfrom == to)。原始数组中后续元素的值被放置到副本中的后续元素中。范围(to)的最终索引必须大于或等于from,也可以大于original.length,在这种情况下,false被放置在副本中所有索引大于或等于original.length - from的元素中。返回数组的长度将是to - from

下面是一个简单的例子:

/**
* @Program that Copies the specified range of the specified array into a new
* array.
* CopyofRange8Array.java
* Author:-RoseIndia Team
* Date:-15-May-2008
*/
import java.util.*;
public class CopyofRange8Array {
public static void main(String[] args) {
//creating a short array
Object T[]={"Rose","India","Net","Limited","Rohini"};
// //Copies the specified  short array upto specified range,
Object T1[] = Arrays.copyOfRange(T, 1,5);
for (int i = 0; i < T1.length; i++)
//Displaying the Copied short array upto specified range
System.out.println(T1[i]);
}


}

你可以试试:

System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length);// copies whole array


// copies elements 1 and 2 from sourceArray to targetArray
System.arraycopy(sourceArray, 1, targetArray, 0, 2);

看到javadoc for System

你可以对整数arr使用subList(int fromIndex, int toIndex)方法,就像这样:

import java.util.ArrayList;
import java.util.List;


public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
List<Integer> partialArr = arr.subList(1, 3);


// print the subArr
for (Integer i: partialArr)
System.out.println(i + " ");
}
}

输出将是:2 3

注意subList(int fromIndex, int toIndex)方法对它接收到的第二个变量(var2 - 1)执行- 1,我不知道确切的原因,但这就是发生的情况,可能是为了减少超出数组大小的机会。

public static int[] range(int[] array, int start, int end){
int returner[] = new int[end-start];
for(int x = 0; x <= end-start-1; x++){
returner[x] = array[x+start];
}
return returner;
}

这是一种和Array一样的方法。copyOfRange但是没有导入任何东西