У меня есть массив целых чисел в Java, я бы хотел использовать только его часть. Я знаю, что в Python вы можете сделать что-то вроде этого массива [index:] и он возвращает массив из индекса. В Java возможно что-то подобное.
Получить только часть массива в Java?
Ответ 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), я точно не знаю, почему, но что происходит, возможно, чтобы уменьшить вероятность превышения размера массива.