我想收集两个不同的arraylist中的共同元素

时间:2014-04-03 10:47:20

标签: arrays

ArrayList1 = [a,b,c,d]
ArrayList1 = [d,c,e,f,g]

我想将结果作为

ArrayListFinal = [c,d]

我该如何做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这个...........

for(int i =0;i<list1.size();i++){
    for(int j=0;j<list2.size();j++){
        if(list.get(j).equals(list2.get(i))){
            listfinal.add(list.get(i));
        }
    }
}
for(int i=0;i<listfinal.size();i++){
    System.out.println(list1.get(i));
}

答案 1 :(得分:1)

你的问题是找到两个数组A和B的交叉点(表示为∩)。

假设数组未排序。最简单的方法是逐个比较元素,如下所示:

function getIntersect(arr1, arr2) {
    var temp = [];
    for(var i = 0; i < arr1.length; i++){
        for(var k = 0; k < arr2.length; k++){
            if(arr1[i] == arr2[k]){
                temp.push( arr1[i]);
                break;
            }
        }
    }
    return temp;
}

但是如果arr2比arr1短得多,你可以使用哈希表加速:

function getIntersect(arr1, arr2) {
    var r = [], o = {}, l = arr2.length, i, v;
    for (i = 0; i < l; i++) {
        o[arr2[i]] = true;
    }
    l = arr1.length;
    for (i = 0; i < l; i++) {
        v = arr1[i];
        if (v in o) {
            r.push(v);
        }
    }
    return r;
}