Ho una serie di numeri interi in Java, vorrei usarne solo una parte. So che in Python puoi fare qualcosa come questo array [indice:] e restituisce l'array dall'indice. È qualcosa di simile possibile in Java.
Ho una serie di numeri interi in Java, vorrei usarne solo una parte. So che in Python puoi fare qualcosa come questo array [indice:] e restituisce l'array dall'indice. È qualcosa di simile possibile in Java.
Risposte:
La lunghezza di un array in Java è immutabile. Pertanto, è necessario copiare la parte desiderata come nuovo array.
Utilizzare il copyOfRange
metodo dalla classe java.util.Arrays :
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex è l'indice iniziale dell'intervallo da copiare, incluso.
endIndex è l'indice finale dell'intervallo da copiare, esclusivo. (Questo indice potrebbe trovarsi all'esterno dell'array)
Per esempio:
//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
dimensione maggiore dell'array passato come primo argomento. Quindi, se si desidera una copia completa, creare una variabile facendo riferimento a questo array e utilizzare Arrays.copyOfRange(var, 0, var.length)
oArrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
.
Sì, puoi usare Arrays.copyOfRange
Fa più o meno la stessa cosa (nota che c'è una copia: non cambi l'array iniziale).
List
e a subList
come indicato nella risposta di @ K-ballo.
Puoi provare:
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);
Vedi javadoc per il sistema .
Se si utilizza Java 1.6 o versione successiva, è possibile utilizzare Arrays.copyOfRange
per copiare una parte dell'array. Dal javadoc:
Copia l'intervallo specificato dell'array specificato in un nuovo array. L'indice iniziale dell'intervallo (da) deve essere compreso tra zero e
original.length
, incluso. Il valore inoriginal[from]
viene inserito nell'elemento iniziale della copia (a meno chefrom == original.length
ofrom == to
). I valori degli elementi successivi nell'array originale vengono inseriti negli elementi successivi nella copia. L'indice finale dell'intervallo (to
), che deve essere maggiore o uguale afrom
, può essere maggiore dioriginal.length
, nel qual casofalse
viene inserito in tutti gli elementi della copia il cui indice è maggiore o uguale aoriginal.length - from
. La lunghezza dell'array restituito saràto - from
.
Ecco un semplice esempio :
/**
* @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]);
}
}
Dai un'occhiata a copyOfRange ; ed esempio:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
Puoi usare qualcosa del genere: Arrays#copyOfRange
Puoi usare il subList(int fromIndex, int toIndex)
metodo sui tuoi numeri interi arr, qualcosa del genere:
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 + " ");
}
}
Uscita sarà: 2 3
.
Si noti che il subList(int fromIndex, int toIndex)
metodo esegue meno 1 sulla seconda variabile che riceve (var2 - 1), non so esattamente perché, ma è quello che succede, forse per ridurre la possibilità di superare le dimensioni dell'array.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
come invece di 255 non posso usare Integer.MAX_VALUE, nel caso in cui non volessi ottenere la lunghezza reale