2016-06-08 2 views
0

Я преобразовываю arraylist в набор в java, и полученный набор не дает ожидаемых результатов.Array to Set not cut off 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); 

Я отлажена это, но когда я addAll из бассейна в HashSet, это добавляет только первые 11 символов массива. ДАЖЕ, хотя, когда я отлаживаю, он говорит, что пул = 19, он добавляет 11. Я называю это неправильным? Кажется, это так просто, но это не все. Любой вход очень приветствуется.

+2

Установки не могут иметь дубликаты по их определению. Когда вы добавляете дублирующий элемент, он просто исчезнет. – hexafraction

+0

Какова цель переменной 'difference'? –

+0

Это имеет смысл. Разница определяет, сколько дополнительных букв мне нужно добавить в пул, чтобы добраться до 19 –

ответ

1

Set s в java либо содержат элемент, либо нет. Они не содержат нескольких копий.

В вашем примере из CAPTAINAMERICAABCDE имеется только 11 уникальных символов, CAPTINMERBD. Вот почему вы закончили с 11 в конце.

Вместо этого вы, скорее всего, захотите использовать List, поскольку это позволит использовать несколько экземпляров одной и той же вещи.