2012-05-02 3 views
8

Esiste un metodo che copierà una sezione di un array (non un array) e creerà un nuovo array da esso?Sezione copia Java dell'array

Example: 
[1,2,3,4,5] 

e si crea un nuovo array da esso:

[1,2,3] 

Esistono One Line/metodi che lo farà?

+0

Eventuali duplicati di [ottenere solo parte di un array in Java?] (http://stackoverflow.com/questions/11001720/get-only-part-of-an-array-in-java) – 32cupo

risposta

13

Ecco un Java 1.4 compatibile 1.5-liner:

int[] array = { 1, 2, 3, 4, 5 }; 
int size = 3; 

int[] part = new int[size]; 
System.arraycopy(array, 0, part, 0, size); 

Si potrebbe fare questo in una sola riga, ma non avrebbe un riferimento alla risultato.

Per fare una battuta, si potrebbe refactoring questo in un metodo:

private static int[] partArray(int[] array, int size) { 
    int[] part = new int[size]; 
    System.arraycopy(array, 0, part, 0, size); 
    return part; 
} 

quindi chiamare in questo modo:

int[] part = partArray(array, 3); 
5
int [] myArray = [1,2,3,4,5]; 

int [] holder = new int[size]; 

System.arraycopy(myArray,0,holder,size); 

dove 0 rappresenta l'indice della matrice di origine da cui deve iniziare la copia. e

dimensioni vuote per il numero di operazioni di copia. Che puoi cambiare in base alle tue necessità.

copyOfRange di matrici c'è e molti altri modi con cui questo può essere realizzato

+2

+1 per il tuo commento. – Lion

+1

Manca un argomento perché richiede un altro int per destinationPosition. –

5

C'è un metodo preesistente nella java.util.Arrays: newArray = Arrays.copyOfRange(myArray, startindex, endindex). Oppure si potrebbe facilmente scrivere il proprio metodo:

public static array[] copyOfRange(array[] myarray, int from, int to) { 
    array[] newarray = new array[to - from]; 
    for (int i = 0 ; i < to - from ; i++) newarray[i] = myarray[i + from]; 
    return newarray; 
} 
1

Come altri hanno detto, è possibile utilizzare il metodo Arrays.copyOfRange . Un esempio è:

String[] main = {"one", "two", "three", "four", "five"}; 
int from = 2; 
int to = 4; 
String[] part = Arrays.copyOfRange(main, from, to); 

Ora parte saranno: { "due", "tre", "quattro"}