1

可能重复:
两个列表中的共同元素

我正在尝试获取 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;
}



}
4

2 回答 2

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);
于 2012-11-06T14:56:16.727 回答
0

你想要你List的 s 的交集。您可以使用 aSet和这样的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 集合详细信息

于 2012-11-06T14:58:29.333 回答