1

true如果list1list2分享至少 1 件商品,我该如何退货?

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

someFunction(list1, list2); // returns true

4

5 回答 5

8

看看Collections.disjoint方法。如果是真的,则没有共同点。

于 2013-04-16T05:09:41.397 回答
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);
}
于 2013-04-16T05:22:15.990 回答
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

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

顺便说一句,更快的解决方案是使用IntHashMapApache commons(或SparseArrayAndroid)。

于 2013-04-16T05:26:53.483 回答
0

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

于 2013-04-16T05:09:11.740 回答
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;
}
于 2013-04-16T05:12:35.107 回答