Java - Zufälliges Element / Element aus einer Liste abrufen

1. Einleitung

Ein zufälliges Picking Liste Element ist eine sehr einfache Operation , aber nicht so offensichtlich zu implementieren. In diesem Artikel zeigen wir Ihnen, wie Sie dies in verschiedenen Kontexten am effizientesten tun können.

2. Auswählen eines zufälligen Elements / von zufälligen Elementen

Um ein zufälliges Element aus einer List- Instanz abzurufen, müssen Sie eine zufällige Indexnummer generieren und dann mithilfe der List.get () -Methode ein Element anhand dieser generierten Indexnummer abrufen .

Der wichtigste Punkt hierbei ist, dass Sie keinen Index verwenden dürfen, der die Größe Ihrer Liste überschreitet .

2.1. Einzelner zufälliger Gegenstand

Um einen Zufallsindex auszuwählen, können Sie die Random.nextInt- Methode (int bound) verwenden:

public void givenList_shouldReturnARandomElement() { List givenList = Arrays.asList(1, 2, 3); Random rand = new Random(); int randomElement = givenList.get(rand.nextInt(givenList.size())); }

Statt Zufall Klasse, können Sie immer statische Methode verwenden können Math.random () und multiplizieren sie mit Listengröße ( Math.random () erzeugt Doppelzufallswert zwischen 0 (inklusive) und 1 (exklusiv), so denken Sie daran , es zu werfen int nach Multiplikation).

2.2. Wählen Sie Zufallsindex in Multithread-Umgebung

Wenn Sie Multithread-Anwendungen mit der Instanz einer einzelnen Zufallsklasse schreiben , wird möglicherweise für jeden Prozess, der auf diese Instanz zugreift, derselbe Wert ausgewählt. Wir können immer eine neue Instanz pro Thread erstellen, indem wir eine dedizierte ThreadLocalRandom- Klasse verwenden:

int randomElementIndex = ThreadLocalRandom.current().nextInt(listSize) % givenList.size();

2.3. Wählen Sie Zufällige Elemente mit Wiederholungen

Manchmal möchten Sie vielleicht einige Elemente aus einer Liste auswählen. Es ist ganz einfach:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { Random rand = new Random(); List givenList = Arrays.asList("one", "two", "three", "four"); int numberOfElements = 2; for (int i = 0; i < numberOfElements; i++) { int randomIndex = rand.nextInt(givenList.size()); String randomElement = givenList.get(randomIndex); } }

2.4. Wählen Sie Zufällige Elemente ohne Wiederholungen

Hier müssen Sie sicherstellen, dass das Element nach der Auswahl aus der Liste entfernt wird:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); List givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; for (int i = 0; i < numberOfElements; i++) { int randomIndex = rand.nextInt(givenList.size()); String randomElement = givenList.get(randomIndex); givenList.remove(randomIndex); } }

2.5. Wählen Sie Zufällige Serien

Wenn Sie eine zufällige Reihe von Elementen erhalten möchten, ist die Klasse Collections utils möglicherweise hilfreich:

public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); Collections.shuffle(givenList); int randomSeriesLength = 3; List randomSeries = givenList.subList(0, randomSeriesLength); }

3. Fazit

In diesem Artikel erkundeten wir die effizienteste Art und Weise des Abrufens Zufallselement aus einer Liste instanc e für verschiedene Szenarien .

Codebeispiele finden Sie auf GitHub.