2016-06-08 13 views
0

Ich konvertiere eine Arraylist zu einem Set in Java und die resultierende Menge produziert nicht die erwarteten Ergebnisse.Array zu Set nicht schneidet Java-Array

String[] characterName = {"C","A","P","T","A","I","N","A","M","E","R","I","C","A"}; 
    String[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; 
    List<String> pool = new ArrayList<String>(); 

    for(int i=0;i<characterName.length;i++) { 
     pool.add(characterName[i]); 
    } 

    int difference = 19-characterName.length; 

    for(int i=0;i<difference;i++) { 
     pool.add(alphabet[i]); 
    } 

    Collections.shuffle(pool); 
    Set<String> poolSet= new HashSet<>(); 
    poolSet.addAll(pool); 

Ich habe dies auf Fehler, aber wenn ich vom Pool zum Hashset addAll, es fügt nur die ersten 11 Zeichen des Arrays. Selbst wenn ich debugge, heißt es Pool = 19, es fügt nur 11 hinzu. Rufe ich das falsch? Es scheint so einfach, aber es fügt nicht alles hinzu. Jede Eingabe wird sehr geschätzt.

+2

Sätze können nach ihrer Definition keine Duplikate enthalten. Wenn Sie ein doppeltes Element hinzufügen, wird es einfach verschwinden. – hexafraction

+0

Was ist der Zweck der Variable 'difference'? –

+0

Das macht total Sinn. Der Unterschied bestimmt, wie viele zusätzliche Buchstaben ich dem Pool hinzufügen muss, um zu 19 zu gelangen –

Antwort

1

Set s in Java entweder ein Element enthalten oder nicht. Sie enthalten nicht mehrere Kopien davon.

In Ihrem Beispiel, aus CAPTAINAMERICAABCDE, gibt es nur 11 eindeutige Zeichen, CAPTINMERBD. Deshalb hast du am Ende 11.

Sie werden wahrscheinlich stattdessen eine List verwenden, da dies mehrere Instanzen der gleichen Sache zulassen würde.