У мене є масив Integers на Java, я хотів би використовувати лише його частину. Я знаю, що в Python ви можете зробити щось подібне до цього масиву [index:], і він повертає масив з індексу. Чи можливо щось подібне можливо на Java.
У мене є масив Integers на Java, я хотів би використовувати лише його частину. Я знаю, що в Python ви можете зробити щось подібне до цього масиву [index:], і він повертає масив з індексу. Чи можливо щось подібне можливо на Java.
Відповіді:
Довжина масиву в Java незмінна. Отже, потрібно скопіювати потрібну частину у новий масив.
Використовуйте 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)
endIndex
більший розмір масиву, переданого як перший аргумент. Отже, якщо ви хочете повну копію, створіть змінну, що посилається на цей масив, та використовуйте Arrays.copyOfRange(var, 0, var.length)
абоArrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
.
Так, ви можете використовувати Arrays.copyOfRange
Це приблизно те ж саме (зауважте, що є копія: ви не змінюєте початковий масив).
List
та а, subList
як зазначено у відповіді @ K-bal.
Ви можете спробувати:
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 для System .
Якщо ви використовуєте Java 1.6 або новішої версії, ви можете Arrays.copyOfRange
скопіювати частину масиву. Від javadoc:
Копіює вказаний діапазон вказаного масиву в новий масив. Початковий показник діапазону (від) повинен лежати між нулем і
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]);
}
}
Перевірте copyOfRange ; та приклад:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
Ви можете використовувати щось подібне: Arrays#copyOfRange
Ви можете використовувати 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 на 2-й змінній, яку він отримує (var2 - 1), я не знаю точно чому, але саме так трапляється, можливо, щоб зменшити шанс перевищення розміру масиву.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
як замість 255 я не можу використовувати Integer.MAX_VALUE, якщо я не хочу отримати реальну довжину