如何创建一个列表,其中包含两个相同的其他列表中的元素?

时间:2012-11-06 14:54:22

标签: java list iterator integer

  

可能重复:
  Common elements in two lists

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



}

2 个答案:

答案 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的交集。您可以使用SetretainAll方法完成此操作:

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