333

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

4

9 回答 9

542

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

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

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)
于 2012-06-12T17:29:44.097 回答
38

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

MyClass[] array = ...;
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length);
于 2012-06-12T17:30:11.760 回答
25

是的,您可以使用Arrays.copyOfRange

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

于 2012-06-12T17:29:57.623 回答
15

你可以试试:

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

于 2015-11-23T19:37:39.913 回答
8

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

将指定数组的指定范围复制到新数组中。范围 (from) 的初始索引必须介于 0 和 之间original.length,包括 0 和 。at 的值original[from]被放入副本的初始元素中(除非from == original.lengthor from == to)。原始数组中后续元素的值被放入副本中的后续元素中。范围()的最终索引,to必须from大于等于 返回数组的长度为.original.lengthfalseoriginal.length - fromto - 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]);
    }

}
于 2012-06-12T17:32:09.023 回答
4

查看copyOfRange;和例子:

int[] arr2 = Arrays.copyOfRange(arr,0,3);
于 2012-06-12T17:29:59.417 回答
1

你可以使用这样的东西:Arrays#copyOfRange

于 2012-06-12T17:29:59.457 回答
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 执行相同操作但不导入任何内容的方法

于 2020-10-05T13:10:19.197 回答
-4

您可以subList(int fromIndex, int toIndex)在整数 arr 上使用方法,如下所示:

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,我不知道确切原因,但这就是发生的情况,可能是为了减少超出数组大小的机会。

于 2019-09-22T16:15:04.323 回答