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

时间:2012-06-12 17:27:21

标签: java arrays

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

9 个答案:

答案 0 :(得分:368)

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

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

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

E.g:

   //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)

答案 1 :(得分:30)

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

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

答案 2 :(得分:22)

是的,您可以使用Arrays.copyOfRange

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

答案 3 :(得分:7)

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

  

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

这是simple example

{{1}}

答案 4 :(得分:3)

查看copyOfRange;例如:

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

答案 5 :(得分:1)

您可以使用以下内容:Arrays#copyOfRange

答案 6 :(得分:0)

Arrays.copyOfRange(array,from,to);

输入参数&#39;到&#39;包容性。因此,在您的代码中,添加一个&#39; +1值以解决您的问题。

答案 7 :(得分:0)

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相同的方法,但不导入任何内容

答案 8 :(得分:-1)

您可以在整数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)方法在它收到的第二个变量(变量2-1)上执行负1,我不知道为什么,但这是发生了什么,也许是为了减少超过数组。