Я пытаюсь найти элементы, которые встречаются в двух наборах. Я должен использовать наборы, поэтому я не использую никаких других библиотек и т.д.Как вы сравниваете содержимое двух наборов хэшей?
Мой код выглядит следующим образом:
public static void intersection (ArrayList<Integer>s1, ArrayList<Integer>s2) {
HashSet <Integer> all = new HashSet<Integer>();
HashSet <Integer> both = new HashSet<Integer>();
for (int i=0; i<s1.size(); i++)
all.add(s1.get(i));
for (int x=0; x<s2.size(); x++) {
if ((!(all.add(s2.get(x)))) && (((all.contains(s2.get(x)))))) {
both.add(s2.get(x));
}
}
System.out.println("intersection - "+ both);
}
В ArrayLists содержат следующие значения:
s1 : 4 5 5 6 76 7 7 8 8 8 8 8
с2: 23 3 4 3 5 3 53 5 46 46 4 6 5 3 4
Однако выход состоит в следующем:
3, 4, 5, 6, 46
Мой выход желание:
4, 5, 6
Я понимаю, что он добавляет 3 и 46, потому что для ArraySet
оба они являются элементами, присутствующими в s2 ArrayList
, но не в s1. Однако я добавил all.contains(s2.get(x))
, чтобы убедиться, что добавленное число присутствует в s1 или HashSet
. Почему не работает?
это для назначения, так что я должен напишите вот так. @ReutSharabani – ZeldaX
взгляните на retainAll() или просто посмотрите здесь: http://stackoverflow.com/questions/8882097/is-there-a-way-to-calculate-the-intersection- из двух наборов – hasan
, пожалуйста, правильно отформатируйте свой код. Некоторые комментарии: а) вы можете повторно использовать 'int i' во втором' for'-loop, b), почему вы добавляете все: от 's1' до' all'? Насколько я понимаю, вам нужно только пересечение, а не союз. – Turing85