2011-08-16 9 views
11

W Javie, wiem, że aby przetasować ArrayList, metoda Collections.shuffle() istnieje, jednak tasuje całą listę.Jak mogę przetasować określony zakres tablicy ArrayList?

Jak mogę napisać metodę (czy ktoś może napisać i pokazać mi to?), Takie jak:

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

Raczej niesamowite zobaczyć cztery odpowiedzi mówiąc prawie to samo. :) – Malcolm

Odpowiedz

22

użytkowania List.subList i Collections.shuffle coś takiego:

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

(Zauważ, że drugi indeks do subListekskluzywny, więc użyj end+1, jeśli chcesz włączyć do losowania indeks end.)

Odzwraca z widoku z listy, zmiany wprowadzone (metodą losową) do listy podrzędnej, również wpłyną na oryginalną listę.

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

Uwaga +1, ponieważ końcowy indeks subList() jest wyłączny.

0

To proste

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

Duh, jestem spóźniony! :( – adarshr