假设我有两个字符串数组:
String[] first = new String[]{"12","23","44","67"};
String[] second= new String[]{"12","22","46","67"};
我搜索了一个像 PHP 的array_diff这样的函数,它会给我这两个数组的区别,如下所示:
{"23","44"}
此操作是否有内置函数,或者我应该创建一个 for 循环并检查差异?
假设我有两个字符串数组:
String[] first = new String[]{"12","23","44","67"};
String[] second= new String[]{"12","22","46","67"};
我搜索了一个像 PHP 的array_diff这样的函数,它会给我这两个数组的区别,如下所示:
{"23","44"}
此操作是否有内置函数,或者我应该创建一个 for 循环并检查差异?
您可以从这些数组中创建两个 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);
PHP 数组根本不是数组,这就是为什么有这种奇怪的 diff 方法。
如果你想要数学意义上的两组(A - B)之间的差异,那么
1) 使用集
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
2)使用差异方法(包含set1中的所有元素,而不是set2)
set1.removeAll(set2)
请注意,这是不对称的差异。