2011-08-16 13 views
11

In Java, so che per mescolare un ArrayList, esiste il metodo Collections.shuffle(), tuttavia questo mescola l'intero elenco.Come posso mescolare un intervallo specifico di un ArrayList?

Come posso scrivere un metodo (o, qualcuno può scrivere e mi mostra vero?) Come il seguente:

private ArrayList<AnObject> list; 

/** 
* Shuffles the concents of the array list in the range [start, end], and 
* does not do anything to the other indicies of the list. 
*/ 
public void shuffleArrayListInTheRange(int start, int end) 
+1

Piuttosto sorprendente vedere quattro risposte che dicono quasi la stessa cosa. :) – Malcolm

risposta

22

Usa List.subList e Collections.shuffle, in questo modo:

Collections.shuffle(list.subList(start, end)); 

(Notare che il secondo indice a esclusivi, quindi utilizzare end+1 se si desidera includere l'indice end nello shuffle.)

Dal List.subList restituisce una vista della lista, le modifiche apportate (con il metodo shuffle) alla sottocartella, interesseranno anche l'elenco originale.

7

Sì - utilizzare List.sublist(start, end) e Collections.shuffle() che, vale a dire:

Collections.shuffle(list.sublist(start, end)); 

sublist restituisce un vista della lista, in modo che quando si rimescolalo, si rimescola la lista reale, ma solo tra inizio e fine

2
Collections.shuffle(list.subList(start, end+1)); 

Nota il +1, perché l'indice finale di subList() è esclusivo.

0

E 'semplice

public void shuffleArrayListInTheRange(int start, int end) { 
    Collections.shuffle(list.subList(start, end)); 
} 
+0

Duh, sono in ritardo! :( – adarshr

Problemi correlati