2017-08-02 1 views
-4

Ich habe eine Liste von Arrays (Array-Größe 5), jedes Array enthält ganze Zahlen von 1 bis 17, wobei jede ganze Zahl nur einmal in jedem Array erscheint. Zum Beispiel ist das erste Array in meiner Liste (1, 4, 2, 15, 13), das zweite Array in meiner Liste ist (2, 5, 9, 13, 7) und so weiter.Java - Zufallszahlen effizient erzeugen

Ich möchte ein zufälliges Array generieren und dieses Array sollte nicht eins in meiner Liste sein. Um genau zu sein, möchte ich kein Array (2, 5, 9, 13, 7) haben, wie es bereits in meiner Liste ist (das zweite in meiner Liste, siehe oben). Gibt es einen effizienten Weg, dies zu lösen? Danke vielmals.

+1

Was haben Sie bisher versucht? – Andreas

+2

Das hört sich an, als würde ein 'Set' von' Sets' funktionieren. Angenommen, dass [1,2,3,4,5] = [5,4,3,2,1] '. 'Set's in Java garantieren, dass jedes Element in ihnen nur einmal erscheint. – lilott8

+0

Die Annahme ist richtig ([1,2,3,4,5] = [5,4,3,2,1]). Also, wenn ich dich richtig verstanden habe, muss ich jedes Array in ein Set packen und dann werde ich ein neues Array erstellen und es mit einem meiner Sets vergleichen - ist das richtig? – Ferit

Antwort

1

Von meinen Kommentaren: Konvertieren Sie die Arrays in set s und fügen Sie diese zu einem anderen set. das heißt:

Set<Set<Integer>> storage = new HashSet<>(); 

public void doSomething() { 
    // loop or do something interesting. 
    storage.add(getNextGeneratedSet()); 
} 

public Set<Integer> getNextGeneratedSet() { 
    Set<Integer> result = new HashSet<>(); 
    for(int i : getNextRandomInt()) { 
     result.add(i); 
    } 
    return result; 
} 

Zwei der schönen Eigenschaften von set s sind, dass Reihenfolge keine Rolle spielt und dass die Einzigartigkeit der Fall ist. Was dir in diesem Fall sehr hilft; und sie machen es effizient. Javas hashset Implementierung ist O (1) auf add und contains - die zwei Methoden, die Sie verwenden werden.

Verwandte Themen