获取Java中的数组元素差异

时间:2013-05-13 10:49:18

标签: java arrays string-matching

说我有两个字符串数组:

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

我搜索了像PHP array_diff这样的函数,它会给我这两个数组的不同之处:

{"23","44"}

是否有内置函数用于此操作,还是应该创建for循环并检查差异?

3 个答案:

答案 0 :(得分:4)

您可以从这些数组中创建两个集合,例如:

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);

答案 1 :(得分:3)

Guava的Sets类有一个difference方法。

所以

Set<String> diff = Sets.difference(newHashSet(first), newHashSet(second));

答案 2 :(得分:1)

PHP数组根本就不是数组,这就是为什么diff有这么奇怪的方法。

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

1)使用套装

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

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

set1.removeAll(set2)

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