Java切片数组,如python中

时间:2016-12-08 16:03:30

标签: java arrays

我在Java中有一个字节数组,需要获取它的一部分。我希望以与使用切片的Python列表相同的方式使用Java数组。 Java中有类似的东西吗?提前谢谢。

7 个答案:

答案 0 :(得分:8)

您可以使用数组(http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html)内置Arrays#copyOfRange()

Arrays.copyOfRange(oldArray, startIndex, endIndex);

答案 1 :(得分:7)

使用普通数组时,没有相应的数据。

使用ArrayList,您可以使用array_list.subList(fromIndex, toIndex)来获得切片。

切片由原始ArrayList支持。对切​​片所做的更改将反映在原始文件中。原件中的非结构性更改将反映在子列表中;子列表中未定义原始列表的结构修改结果。

byte[] byte_array = { 10, 20, 30, 40, 50 };
List<Byte> byte_list = Arrays.asList(byte_array);
List<Byte> slice = byte_list.subList(1,3); // {20, 30}

byte x = slice.get(1) ; // Returns 30

slice.set(0, 21);
// slice is now {21, 30} and byte_array is { 10, 21, 30, 40, 50}

答案 2 :(得分:2)

Java在数组上没有构建方法来进行切片,但是有些类可以帮助你完成它。

检查出来:How to create a sub array from another array in Java?

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

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

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

答案 3 :(得分:1)

没有类似k [: - 3]或类似

的pythonic方式

但你可以使用非常类似的工具Arrays类:

Arrays.copyOfRange(k, 0, 1);

答案 4 :(得分:1)

为了得到负值,你可以为此做一个辅助方法:

public final class Slice {
    private Slice() {}

    public static <T> T[] copyOfRange(final T[] a, int start) {
        return slice(a, start, a.length);
    }

    public static <T> T[] copyOfRange(final T[] a, int start, int end) {
        if (start < 0) start = a.length + start;
        if (end < 0) end = a.length + end;
        return Arrays.copyOfRange(a, start, end);
    }
}

如果您希望它非常快/实用,您还需要为每种基本类型定义它。

答案 5 :(得分:0)

你可以System.arrayCopy()方法来做到这一点:

例如:

int[] arr = new int[100];
// copy from sarr - 11 to 20th elements to arr
System.arrayCopy(sarr,11,arr,0,10);

答案 6 :(得分:0)

for循环的工作方式与python中的slice运算符完全不同。

这是python中的列表:

>>>a = [1, 2, 3, 4, 5]

这就是切片操作符的工作方式:

>>>a[1:4:2] # Specify the start index, end index and the increment
[2,4]       # Output returned

Java中的for循环实现相同的功能将如下工作:

for(int i=start_index; i<end_index; i+=increment)
   System.out.print(a[i] + " ");