Подтвердить что ты не робот

Получить только часть массива в Java?

У меня есть массив целых чисел в Java, я бы хотел использовать только его часть. Я знаю, что в Python вы можете сделать что-то вроде этого массива [index:] и он возвращает массив из индекса. В Java возможно что-то подобное.

4b9b3361

Ответ 1

Использовать метод copyOfRange из java.util.Arrays класс:

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)

Ответ 2

Вы можете обернуть массив как список и запросить его подписок.

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

Ответ 3

Да, вы можете использовать Arrays.copyOfRange

Он делает примерно то же самое (обратите внимание, что есть копия: вы не меняете начальный массив).

Ответ 4

Если вы используете Java 1.6 или более, вы можете использовать Arrays.copyOfRange для копирования части массива. Из javadoc:

Копирует указанный диапазон указанного массива в новый массив. Начальный индекс диапазона (from) должен лежать между нулем и original.length, включительно. Значение в original[from] помещается в исходный элемент копии (кроме from == original.length или from == 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]);
    }

}

Ответ 5

Вы можете попробовать:

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 для системы.

Ответ 6

Проверьте copyOfRange; и пример:

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

Ответ 7

Вы можете использовать что-то вроде этого: Arrays#copyOfRange

Ответ 8

Вы можете использовать метод 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) выполняет минус 1 для второй получаемой им переменной (var2 - 1), я точно не знаю, почему, но что происходит, возможно, чтобы уменьшить вероятность превышения размера массива.