2015-12-18 5 views
3

Я не понимаю, почему сложения не работают (на самом деле, если я прошел в пользовательском классе, я мог бы пересмотреть мой метод hascode и equals, но это Integer). Итак, вместо того, чтобы содержать то, что я могу использовать? Пожалуйста помоги.HashSet не работает для Integer

Set<Integer> st = new HashSet<>(); 
st.add(12); 
Set<Integer> st1 = new HashSet<>(); 
st1.add(12); 
System.out.println(st.contains(st1)); 
+2

'containsAll (st1)'? – WalterM

+0

Путаница вызвана методом 'contains', ожидающим' Object', а не 'Integer'. Поэтому основная причина связана с этим: http://stackoverflow.com/questions/104799/why-arent-java-collections-remove-methods-generic – Marco13

+0

'st.contains (st1)' check is 'st' содержит объект 'st1' (это' Set '), но вы просто добавляете' 12' к нему, а не 'st1' – RuslanK

ответ

5

st1 является HashSet не Integer.

попробовать с этим кодом, и вы увидите, что он работает:

Set<Integer> st = new HashSet<>(); 
st.add(12); 
System.out.println(st.contains(12)); 

или

public static void main(String[] args) { 
    Set<Integer> st = new HashSet<>(); 
    st.add(12); 
    Set<Integer> st1 = new HashSet<>(); 
    st1.add(12); 
    System.out.println(st.containsAll(st1)); 
    } 
7

st.contains(st1) возвращает false, так как тип st1 (Set<Integer>) не совпадает с типом элементов в st (что составляет Integer).

Вы можете, однако, использовать Set#containsAll(Collection<?>) метод:

System.out.println(st.containsAll(st1)); 

, который будет проверять, если элементы st1 присутствуют в st.