两个数组之间的差异

可能重复:
java中的arraylists的交集/联合

你好,我有两个字符串数组。我想打印两个arrrays之间的差异。有没有这方面的java方法? 例如;

String[ ] first={"A","B","C"}; String[ ] second={"C","B"}; 

结果必须是“A”。 感谢所有评论。

将数组转换为Set

 new HashSet(Arrays.asList(array)); 

并做

 Set commonOnes = biggerSet.retainAll(smallerSet); biggerSet.removeAll(commonOnes).add(smallerSet.removeAll(commonOnes)) 

或使用番石榴difference()

这在O(n log n + m log m) ,其中nfirst的大小, msecond的大小。 基本上,它对数组进行排序,然后通过每个数组,在每次机会时添加与LinkedList不匹配的数组,然后在最后创建一个数组。 此代码的早期版本无法正常工作,因为较长列表中的尾随元素最后未添加。

 public class SetDifference { public static void main(String... args) { String[] arrA = {"1", "2", "3", "4", "5", "25", "10"}; String[] arrB = {"1", "2", "10", "4", "30"}; System.out.println(Arrays.toString(differences(arrA, arrB))); } public static String[] differences(String[] first, String[] second) { String[] sortedFirst = Arrays.copyOf(first, first.length); // O(n) String[] sortedSecond = Arrays.copyOf(second, second.length); // O(m) Arrays.sort(sortedFirst); // O(n log n) Arrays.sort(sortedSecond); // O(m log m) int firstIndex = 0; int secondIndex = 0; LinkedList diffs = new LinkedList(); while (firstIndex < sortedFirst.length && secondIndex < sortedSecond.length) { // O(n + m) int compare = (int) Math.signum(sortedFirst[firstIndex].compareTo(sortedSecond[secondIndex])); switch(compare) { case -1: diffs.add(sortedFirst[firstIndex]); firstIndex++; break; case 1: diffs.add(sortedSecond[secondIndex]); secondIndex++; break; default: firstIndex++; secondIndex++; } } if(firstIndex < sortedFirst.length) { append(diffs, sortedFirst, firstIndex); } else if (secondIndex < sortedSecond.length) { append(diffs, sortedSecond, secondIndex); } String[] strDups = new String[diffs.size()]; return diffs.toArray(strDups); } private static void append(LinkedList diffs, String[] sortedArray, int index) { while(index < sortedArray.length) { diffs.add(sortedArray[index]); index++; } } }