1

2 つの文字列配列があるとします。

String[] first = new String[]{"12","23","44","67"};
String[] second= new String[]{"12","22","46","67"};

PHP のarray_diffのような関数を検索すると、次のようにこれら 2 つの配列の違いが得られます。

{"23","44"}

この操作には組み込み関数がありますか、それとも for ループを作成して違いを確認する必要がありますか?

4

3 に答える 3

4

次のように、これらの配列から 2 つの Set を作成できます。

List<String> firstList = Arrays.asList(first);
List<String> secondList = Arrays.asList(second);

Set<String> firstSet = new HashSet<String>(first);
Set<String> secondSet = new HashSet<String>(second);  

次に、removeAllメソッドを使用します。

firstSet.removeAll(secondList);
secondSet.removeAll(firstList);

そのためfirstList、最初の配列でのみ使用可能なすべての要素とsecondList、2 番目の配列で使用可能な要素のみが含まれるようになりました。

いずれかのセットで使用可能な要素のみを含むセット (両方のセットで使用可能な要素を含まない) は、次を使用して作成できます。

new HashSet<String>(firstSet).addAll(secondSet);
于 2013-05-13T10:55:22.313 に答える
3

Guava のSetsクラスには差分メソッドがあります。

それで

Set<String> diff = Sets.difference(newHashSet(first), newHashSet(second));
于 2013-05-13T10:51:44.767 に答える
1

PHP 配列はまったく配列ではありません。そのため、diff にこのような奇妙なメソッドが存在します。

数学的な意味で 2 つのセット (A - B) の差が必要な場合は、

1) セットを使用する

Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();

2) 差分メソッドを使用する (set2 にはない set1 のすべての要素を含む)

set1.removeAll(set2)

これは非対称差であることに注意してください。

于 2013-05-13T10:57:05.110 に答える