在Java中只获取一部分数组?

Bor*_*lis 249 java arrays

我在Java中有一个Integers数组,我只想使用它的一部分.我知道在Python中你可以做类似这个数组[index:]的东西,它从索引中返回数组.这样的事情在Java中是可能的.

eli*_*ias 403

使用java.util.Arrays类中的copyOfRange方法:

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
Run Code Online (Sandbox Code Playgroud)

startIndex是要复制的范围的初始索引(包括).
endIndex是要复制的范围的最终索引,不包括.(此索引可能位于数组之外)

例如:

   //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)
Run Code Online (Sandbox Code Playgroud)


K-b*_*llo 31

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

MyClass[] array = ...;
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length);
Run Code Online (Sandbox Code Playgroud)


Den*_*ret 22

是的,您可以使用Arrays.copyOfRange

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

  • 也就是说,如果你不想制作一个明确的副本,你需要使用@K-ballo的答案中概述的`List`和`subList`. (2认同)

Jus*_*ier 7

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

将指定数组的指定范围复制到新数组中.范围(from)的初始索引必须介于0和0之间original.length.值at 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]);
    }

}
Run Code Online (Sandbox Code Playgroud)


Stv*_*dll 7

你可以试试:

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); 
Run Code Online (Sandbox Code Playgroud)

有关系统信息,请参见javadoc

  • 但使用 arrays.copyOfRange() 可以提高可读性并显着降低出现错误的可能性。 (3认同)
  • 我只是喜欢这实际上是如何实际实现Arrays.copyOf()和Arrays.copyOfRange()的方式(无边界检查),但是它没有获得任何投票,而尽管System.arraycopy约会,但开销稍高的实用程序方法包装器还是投票了回到1995年。 (2认同)
  • 我想对于某些人来说,它看起来不够“现代”。 (2认同)