两个数组之间的差异

nwsw7zdq  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(405)

这个问题在这里已经有答案了

8年前关门了。
可能重复:
java中数组列表的交/并
您好,我有两个字符串数组。我想打印两个数组之间的差异。有什么java方法吗?例如;

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

结果必须是“a”。谢谢大家的评论。

1sbrub3j

1sbrub3j1#

将数组转换为 Set<String> ```
new HashSet(Arrays.asList(array));

  1. 做什么

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

  1. 或者用Guava `difference()`
nimxete2

nimxete22#

这件衣服穿进去了 O(n log n + m log m) ,在哪里 n 大小是 first ,和 m 大小是 second . 基本上,它对数组进行排序,然后遍历每个数组,添加与数组不匹配的数组 LinkedList 在每个机会,然后在最后做一个数组。此代码的早期版本无法正常工作,因为较长列表中的尾部元素没有添加到末尾。

  1. public class SetDifference {
  2. public static void main(String... args) {
  3. String[] arrA = {"1", "2", "3", "4", "5", "25", "10"};
  4. String[] arrB = {"1", "2", "10", "4", "30"};
  5. System.out.println(Arrays.toString(differences(arrA, arrB)));
  6. }
  7. public static String[] differences(String[] first, String[] second) {
  8. String[] sortedFirst = Arrays.copyOf(first, first.length); // O(n)
  9. String[] sortedSecond = Arrays.copyOf(second, second.length); // O(m)
  10. Arrays.sort(sortedFirst); // O(n log n)
  11. Arrays.sort(sortedSecond); // O(m log m)
  12. int firstIndex = 0;
  13. int secondIndex = 0;
  14. LinkedList<String> diffs = new LinkedList<String>();
  15. while (firstIndex < sortedFirst.length && secondIndex < sortedSecond.length) { // O(n + m)
  16. int compare = (int) Math.signum(sortedFirst[firstIndex].compareTo(sortedSecond[secondIndex]));
  17. switch(compare) {
  18. case -1:
  19. diffs.add(sortedFirst[firstIndex]);
  20. firstIndex++;
  21. break;
  22. case 1:
  23. diffs.add(sortedSecond[secondIndex]);
  24. secondIndex++;
  25. break;
  26. default:
  27. firstIndex++;
  28. secondIndex++;
  29. }
  30. }
  31. if(firstIndex < sortedFirst.length) {
  32. append(diffs, sortedFirst, firstIndex);
  33. } else if (secondIndex < sortedSecond.length) {
  34. append(diffs, sortedSecond, secondIndex);
  35. }
  36. String[] strDups = new String[diffs.size()];
  37. return diffs.toArray(strDups);
  38. }
  39. private static void append(LinkedList<String> diffs, String[] sortedArray, int index) {
  40. while(index < sortedArray.length) {
  41. diffs.add(sortedArray[index]);
  42. index++;
  43. }
  44. }
  45. }
展开查看全部

相关问题