2014-11-06 4 views
-1
Set<Short> set = new HashSet<Short>(); 
short i = 0; 
for (i = 0; i < 100; i++) { 
    set.add(i); 
    set.remove(i-1);    
} 
System.out.println(set.size()); 

При запуске выше вывода программы приходит 100. я понял, что, как мы вставляем короткие значения в наборе и пытаемся удалить целое значение. Так что он не удаляется из набора.Программы вывода объяснение HashSet

Но если мы изменим удалить заявление, как показано ниже

set.remove(i);  

Выход приходит 0. Любая идея?

+0

То же http://stackoverflow.com/questions/13366060/java-different-outputs-when-add-remove-short-and- integer-elements-in-a-set –

+1

Вместо того, чтобы говорить «Выход из чего-то другого», вы можете просто распечатать, видите ли вы в этих случаях, а также то, что вы ожидаете увидеть? – ha9u63ar

+0

Прошу пожалуйста прочитайте полностью вопрос. –

ответ

0

Пока вы удаляете его из набора, i-1 рассматривается как объект и должен быть ориентирован на тип, чтобы удалить правильное значение из набора. set.remove((short)(i - 1))

Set<Short> set = new HashSet<Short>(); 
short i = 0; 
for (i = 0; i < 100; i++) { 
     set.add(i); 
     set.remove((short)(i - 1)); 
} 
System.out.println(set.size());  

Попробуйте этот код его дающий выход в 1.

+0

Я знаю, что если мы отбрасываем короткий элемент, он будет удален из набора. Но мой вопрос - это что-то еще. –

+1

Просто потому, что 1 по умолчанию является целым числом и не является коротким, поэтому, если i является коротким, i-1 является int. Во втором фрагменте i остается коротким, поэтому значения удаляются из набора – Dici

+0

Спасибо, понято. –

Смежные вопросы