说我有两个字符串数组:
String[] first = new String[]{"12","23","44","67"};
String[] second= new String[]{"12","22","46","67"};
我搜索了像PHP array_diff这样的函数,它会给我这两个数组的不同之处:
{"23","44"}
是否有内置函数用于此操作,还是应该创建for循环并检查差异?
答案 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)
注意,这是不对称的差异。