比较Java列表

时间:2013-04-16 05:04:55

标签: java

如果truelist1共享至少1个项目,如何返回list2

示例:list1 =(1,2,3)... list2 =(2,3,4)

someFunction(list1, list2); // returns true

5 个答案:

答案 0 :(得分:8)

查看Collections.disjoint方法。如果确实如此,则没有共同的项目。

答案 1 :(得分:1)

就像TofuBeer所说的那样,看看Collections.disjoint(如果我有任何声誉,我会投票支持他......):

public void main() {
    List<Integer> list1 = Arrays.asList(1,2,3);
    List<Integer> list2 = Arrays.asList(2,3,4); 
    someFunction(list1, list2);
}

private boolean someFunction(List<Integer> list1, List<Integer> list2) {
    return ! Collections.disjoint(list1, list2);
}

答案 2 :(得分:0)

使用“Iterator”迭代一个列表并使用包含其他列表的方法来检查元素。不是吗?

答案 3 :(得分:0)

public boolean someFunction(List<T> l1,List<T> l2)
{
    Iterator<T> i = l1.iterator();
    while(i.hasNext())
    {
        if(l2.contains(i.next())
            return true;
    }
    return false;
}

答案 4 :(得分:0)

如果空间不是问题,为什么不使用HashMap?

Iterator it1 = list1.iterator(), it2 = list2.iterator();
Map <K, Integer> listmap = new HashMap <K, Integer> ();

while (it1.hasNext() && it2.hasNext()) {
    K elem1 = it1.next(), elem2 = it2.next();
    if ((listmap.get(elem1) != null && listmap.get(elem1) == 2) || 
        (listmap.get(elem2) != null && listmap.get(elem2) == 1)) {
        return false;
    }
    else {
        listmap.put(elem1, 1);
        listmap.put(elem2, 2);
    }

}
return true

这样,您不必遍历整个第二个数组来检查第一个数组的每个元素,因为向哈希表添加元素会在分摊的常量时间内发生。

顺便说一下,更快的解决方案是使用Apache commons的IntHashMap(或Android上的SparseArray)。