如果true
和list1
共享至少1个项目,如何返回list2
?
示例:list1
=(1,2,3)... list2
=(2,3,4)
someFunction(list1, list2); // returns true
答案 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
)。