返品して少なくとも 1 つのアイテムを共有するにはどうtrue
すればよいですか?list1
list2
例: list1
= (1,2,3) ... list2
= (2,3,4)
someFunction(list1, list2); // returns true
返品して少なくとも 1 つのアイテムを共有するにはどうtrue
すればよいですか?list1
list2
例: list1
= (1,2,3) ... list2
= (2,3,4)
someFunction(list1, list2); // returns true
Collections.disjoint
メソッドを見てみましょう。それが本当なら、共通点はありません。
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);
}
"Iterator" を使用して 1 つのリストを反復処理し、他のリストの contains メソッドを使用して要素をチェックします。ではない?
スペースが問題にならないのであれば、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
この方法では、最初の配列の各要素をチェックするために 2 番目の配列全体をループする必要はありません。これは、ハッシュ テーブルへの要素の追加が償却定数時間で行われるためです。
ちなみに、より高速なソリューションはIntHashMap
、Apache commons (またはSparseArray
Android) から使用することです。