web-dev-qa-db-fra.com

obtenir qu'une partie d'un tableau en Java?

J'ai un tableau d'entiers en Java, j'aimerais n'en utiliser qu'une partie. Je sais qu'en Python, vous pouvez faire quelque chose comme ce tableau [index:] et il retourne le tableau à partir de l'index. Est-ce que quelque chose comme ceci est possible en Java.

201
Borut Flis

Utilisez la méthode copyOfRange de Java.util.Arrays class:

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 être 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)
342
elias

Vous pouvez envelopper votre tableau sous forme de liste et demander une sous-liste.

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

Oui, vous pouvez utiliser Arrays.copyOfRange

C'est à peu près la même chose (notez qu'il y a une copie: vous ne changez pas le tableau initial).

21
Denys Séguret

Si vous utilisez Java 1.6 ou une version ultérieure, 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 (from) doit être compris entre zéro et original.length inclus. La valeur à original[from] est placée dans l'élément initial de la copie (sauf si from == original.length ou from == to). Les valeurs des éléments suivants du tableau d'origine sont placées dans les éléments suivants de la copie. L'indice final de la plage (to), qui doit être supérieur ou égal à from, peut être supérieur à original.length, auquel cas false est placé dans tous les éléments de la copie dont l'indice est supérieur ou égal à original.length - from. La longueur du tableau retourné sera to - 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]);
    }

}
7
Justin Ethier

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 .

4
StvnBrkdll

Vérifier copyOfRange ; et exemple:

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

Vous pouvez utiliser quelque chose comme ceci: Arrays#copyOfRange

1
CBredlow

Arrays.copyOfRange (tableau, de, à);

Le paramètre d'entrée "to" est inclusif. dans votre code, ajoutez un 'à' + 1 pour résoudre votre problème.