1

返品して少なくとも 1 つのアイテムを共有するにはどうtrueすればよいですか?list1list2

例: 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

"Iterator" を使用して 1 つのリストを反復処理し、他のリストの contains メソッドを使用して要素をチェックします。ではない?

于 2013-04-16T05:09:11.740 に答える
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

この方法では、最初の配列の各要素をチェックするために 2 番目の配列全体をループする必要はありません。これは、ハッシュ テーブルへの要素の追加が償却定数時間で行われるためです。

ちなみに、より高速なソリューションはIntHashMap、Apache commons (またはSparseArrayAndroid) から使用することです。

于 2013-04-16T05:26:53.483 に答える