J'ai un tableau d'entiers en Java, je voudrais en utiliser seulement une partie. Je sais qu'en Python, vous pouvez faire quelque chose comme ce tableau [index:] et il renvoie le tableau de l'index. Est-ce quelque chose comme ça possible en Java.
J'ai un tableau d'entiers en Java, je voudrais en utiliser seulement une partie. Je sais qu'en Python, vous pouvez faire quelque chose comme ce tableau [index:] et il renvoie le tableau de l'index. Est-ce quelque chose comme ça possible en Java.
Réponses:
La longueur d'un tableau en Java est immuable. Vous devez donc copier la partie souhaitée en tant que nouveau tableau.
Utilisez la copyOfRange
méthode de la classe java.util.Arrays :
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex est l'index initial de la plage à copier, inclus.
endIndex est l'index final de la plage à copier, exclusif. (Cet index peut se trouver en dehors du tableau)
Par exemple:
//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
plus grand que la taille du tableau passé comme premier argument. Donc, si vous voulez une copie complète, créez une variable faisant référence à ce tableau et utilisez Arrays.copyOfRange(var, 0, var.length)
ouArrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
.
Oui, vous pouvez utiliser Arrays.copyOfRange
Il fait à peu près la même chose (notez qu'il y a une copie: vous ne changez pas le tableau initial).
List
et un subList
comme indiqué dans la réponse de @ K-ballo.
Tu peux essayer:
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);
Voir javadoc pour System .
Si vous utilisez Java 1.6 ou supérieur, vous pouvez utiliser Arrays.copyOfRange
pour copier une partie du tableau. Du javadoc:
Copie la plage spécifiée du tableau spécifié dans un nouveau tableau. L'index initial de la plage (de) doit être compris entre zéro et
original.length
, inclus. La valeur atoriginal[from]
est placée dans l'élément initial de la copie (sauf sifrom == original.length
oufrom == to
). Les valeurs des éléments suivants du tableau d'origine sont placées dans les éléments suivants de la copie. L'index final de la plage (to
), qui doit être supérieur ou égal àfrom
, peut être supérieur àoriginal.length
, auquel cas ilfalse
est placé dans tous les éléments de la copie dont l'index est supérieur ou égal àoriginal.length - from
. La longueur du tableau retourné serato - from
.
Voici un exemple simple :
/**
* @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]);
}
}
Découvrez copyOfRange ; et exemple:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
Vous pouvez utiliser quelque chose comme ceci: Arrays#copyOfRange
Vous pouvez utiliser la subList(int fromIndex, int toIndex)
méthode sur vos entiers arr, quelque chose comme ceci:
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 + " ");
}
}
Sortie sera: 2 3
.
Notez que la subList(int fromIndex, int toIndex)
méthode effectue moins 1 sur la 2ème variable qu'elle reçoit (var2 - 1), je ne sais pas exactement pourquoi, mais c'est ce qui se passe, peut-être pour réduire le risque de dépasser la taille du tableau.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
comme au lieu de 255, je ne peux pas utiliser Integer.MAX_VALUE, au cas où je ne voudrais pas obtenir la longueur réelle