Ответ 1
В вашем наборе содержатся экземпляры Long
, и вы искали Integer
(тип, в который помещается int
, когда требуется Object
).
Тест
System.out.println(s.contains(Long.valueOf(2)));
или
System.out.println(s.contains(2L));
Этот простой код Java добавляет 2
к набору long
и впоследствии выводит, является ли 2
членом набора:
import java.util.*;
class A {
public static void main(String[] args) {
HashSet<Long> s = new HashSet<Long>();
long x = 2;
s.add(x);
System.out.println(s.contains(2));
}
}
Он должен печатать true
, так как 2
находится в наборе, но вместо этого он печатает false
. Почему?
$ javac A.java && java A
false
В вашем наборе содержатся экземпляры Long
, и вы искали Integer
(тип, в который помещается int
, когда требуется Object
).
Тест
System.out.println(s.contains(Long.valueOf(2)));
или
System.out.println(s.contains(2L));
Когда вы говорите s.contains(2)
, он ищет 2
, который по умолчанию является int
, который помещается в поле Integer
. Но объект, который вы сохранили, был Long
. Таким образом, он возвращает false
Попробуйте вместо этого использовать s.contains(Long.valueOf(2))
.
Ваш Hashset хранит объект Long, а не int/Integer. Вы пытаетесь получить Integer, где int помещается в бокс, когда требуется объект.