2009-06-09 12 views
18

Gibt es eine Art Java-Sammlung, die die Reihenfolge meines Abrufs zufällig ist? Zum Beispiel setze ich Integer 1, 2, 3 in die Sammlung und wenn ich versuche sie zu drucken, kann das Ergebnis "1 2 3", "3 2 1" oder "1 3 2" sein?Java zufällige Sammlung

Antwort

43

Wenn Sie nur eine zufällige Folge wollen könnten Sie Collections.shuffle verwenden

List<Integer> list = new LinkedList(); 
    //Add elements to list 
    Collections.shuffle(list); 
+5

Dies ist ein Fall, in dem Sie 'ArrayList' aus der Beschreibung des Algorithmus verwenden möchten, für den Sie schnellen Direktzugriff wünschen. –

5

Nehmen Sie eine normale Sammlung und mischen Sie sie, dann iterieren Sie sie normal.

Sie können das Mischen mit java.util.Collections.shuffle(List<T>) durchführen.

+1

Nun, Ihre erste Antwort verwirrte mich, weil ich nicht die java.util.Collections bewusst ist. Ich bin ein frischer Mann, weißt du? – Sefler

2

Gerade shuffle die Sammlung.

Wenn die Sammlung in der Reihenfolge bleiben muss, können Sie Elemente auf zufällige Indizes zugreifen, aber dann müssen Sie diejenigen verfolgen, die Sie zuvor verwendet haben (vielleicht hängt es von Ihrer Anwendung ab), und das kann sehr sein ineffizient. Eine bessere Lösung, wenn der Speicher kein Hindernis ist, wäre, einfach eine Kopie zu erstellen und diese zu mischen.

1

Nicht, dass ich bewusst bin. Sie können die Werte immer in eine Liste einfügen und Collections.shuffle verwenden, um die Werte in eine zufällige Reihenfolge zu bringen.