2016-01-13 11 views
6

Così ho il seguente array:Come chiamare Collections.Shuffle solo su parte di un array Java

String [] randomList = new String [16]; 
    randomList[0]="Dog"; 
    randomList[1]="Dog"; 
    randomList[2]="Cat"; 
    randomList[3]="Cat"; 
    randomList[4]="Mouse"; 
    randomList[5]="Mouse"; 
    randomList[6]="Car"; 
    randomList[7]="Car"; 
    randomList[8]="Phone"; 
    randomList[9]="Phone"; 
    randomList[10]="Game"; 
    randomList[11]="Game"; 
    randomList[12]="Computer"; 
    randomList[13]="Computer"; 
    randomList[14]="Toy"; 
    randomList[15]="Toy"; 

voglio mischiare solo i primi 9 elementi di questa matrice. Ho usato il seguente codice ma mischia l'intero array.

Collections.shuffle(Arrays.asList(randomList)); 

Come si rimescola solo una parte dell'array anziché il tutto? Sto facendo un programma abbastanza semplice, quindi mi piacerebbe continuare a utilizzare la classe Collections, tuttavia tutte le soluzioni sono benvenute. Grazie

+0

http://stackoverflow.com/questions/7079809/how-can-i-shuffle-a-specific-range-of-an-arraylist –

+0

Probabilmente dovresti inizializzare l'array con 'String [] randomList = {" Cane, "Cane", "Gatto", "Gatto", "Mouse" /*...*/}; 'pure – XenoRo

risposta

10

È possibile utilizzare List type's subList method per ottenere un oggetto List con una vista di un particolare intervallo di elementi dall'elenco originale. Non ho provato questo, ma penso che dovrebbe funzionare:

Collections.shuffle(Arrays.asList(randomList).subList(startIndex, endIndex)); 
+1

dolce! E stavo per suggerire di copiare, shuffle e copiare indietro ... – alfasin

+0

L'ho provato, funziona magnificamente. – azurefrog

1

Si può anche provare il seguito. Tuttavia, un codice più pulito sarebbe come suggerito da templatetypedef. List<String> newList = new ArrayList<String>(); for(int i=0; i<randomList.size()-ValuePreferred; i++){ newList.add(randomList.get(i)); } Collections.shuffle(newList); randomList.removeAll(newList); newList.addAll(randomList);

Inoltre, ho sentito parlare di problemi di perdita di memoria con la sottolista negli array. Non sono sicuro se questo è stato rettificato. Se qualcuno può fornire qualche informazione utile riguardo a ciò sarebbe grandioso. Ricorda che la specifica chiamata del valore tra l'elenco causerà IndexOutOfBoundsIssue(). Questo dovrebbe essere gestito.

Problemi correlati