Frage

Ich bin immer sehr frustriert, weil ich kann nicht scheinen, um herauszufinden, warum Sammlungen schlurfenden funktioniert nicht richtig.

Lassen Sie uns sagen, dass ich versuche, die randomizer Array zu mischen.

int[] randomizer = new int[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

Aus irgendeinem Grund bleiben die Elemente sortiert genau das gleiche, ob ich die Shuffle-Methode aufrufen. Irgendwelche Ideen?

War es hilfreich?

Lösung

Arrays.asList kann nicht mit Arrays von Grundelementen verwendet werden. Verwenden Sie stattdessen:

Integer[] randomizer = new Integer[] {200,300,212,111,6,2332}; 
Collections.shuffle(Arrays.asList(randomizer));

Die gleiche Regel gilt für die meisten Klassen in den Sammlungen Rahmen, dass Sie nicht primitive Typen verwenden können.

Der ursprüngliche Code (mit int[]) kompiliert gut, aber hat nicht funktioniert, wie beabsichtigt, aufgrund des Verhaltens des variadische Methode asList: Es macht nur eine Ein-Elementliste, mit der int Array als einziges Mitglied

Andere Tipps

Chris' Antwort ist richtig.

Wie ich in einem Kommentar sagte auf Chris' Antwort, die zugrunde liegende Array wird in geeignete Weise geändert werden, wenn die Arraylist wachsen muss, und die Liste erstellt einen neuen und Kopien Gegenstände hinein.

Sie können einen Verweis auf die Liste zu halten und iterieren, dass nach dem Arrays.asList Anruf, und nicht danach über das Array iterieren, iteriert über die Liste statt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top