1

假设我有两个字符串数组:

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

我搜索了一个像 PHP 的array_diff这样的函数,它会给我这两个数组的区别,如下所示:

{"23","44"}

此操作是否有内置函数,或者我应该创建一个 for 循环并检查差异?

4

3 回答 3

4

您可以从这些数组中创建两个 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仅在第二个数组中可用的元素。

可以使用以下方法创建仅包含其中一个集合中可用元素(两个集合中均不包含元素)的集合:

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 方法。

如果你想要数学意义上的两组(A - B)之间的差异,那么

1) 使用集

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

2)使用差异方法(包含set1中的所有元素,而不是set2)

set1.removeAll(set2)

请注意,这是不对称的差异。

于 2013-05-13T10:57:05.110 回答