我正在尝试获取2个整数列表,并搜索列表以查找相同的元素。然后将使用所有公共元素创建新列表。我能够在相同的位置找到共同的元素,但不能在不同的位置找到它们。我的代码可以在下面查看:
class Share {
public static void main(String[] args) {
ArrayList<Integer> oneList = new ArrayList<Integer>();
ArrayList<Integer> twoList = new ArrayList<Integer>();
oneList.add(8);
oneList.add(2);
oneList.add(5);
oneList.add(4);
oneList.add(3);
twoList.add(1);
twoList.add(2);
twoList.add(3);
twoList.add(4);
twoList.add(5);
System.out.println(sharedItems(oneList, twoList));
}
static List<Integer> sharedItems(List<Integer> list1, List<Integer> list2) {
Iterator<Integer> it1 = list1.iterator();
Iterator<Integer> it2 = list2.iterator();
int i1 = 0;
int i2 = 0;
ArrayList<Integer> shareList = new ArrayList<Integer>();
while (it1.hasNext()){
i1 = it1.next();}
System.out.println(i1);
while (it2.hasNext()){
i2 = it2.next();
if (i1 == i2){
shareList.add(i1);
}
}
return shareList;
}
}
答案 0 :(得分:3)
您可以使用Set代替:
Set<Integer> commonIntegers = new HashSet<Integer>(list1).retainAll(list2);
然后,您可以更改方法的签名并按原样返回该集:
static Collection<Integer> sharedItems(...) {
return new HashSet<Integer>(list1).retainAll(list2);
}
或将其包装在列表中:
return new ArrayList<Integer> (commonIntegers);
答案 1 :(得分:0)
您想要List
的交集。您可以使用Set
和retainAll
方法完成此操作:
static List<Integer> sharedItems(List<Integer> list1, List<Integer> list2) {
Set<Integer> intersection = new HashSet<Integer>(list1).retainAll(list2);
return new ArrayList<Integer>(intersection);
}
您可以在此处阅读有关设置操作的信息: JCF Set details