如何使用Java获取两个String数组中的不共有元素
嗨,我来给你几种实用的实现方法,不管你用的是Java还是Python这类主流语言,都能轻松搞定这个获取两个数组不共有元素的需求~
Java 实现方法
方法一:利用集合(Set)的特性(高效推荐)
Set的查找操作是O(1)级别,处理大数据量时性能更优,还能自动处理数组中的重复元素:
import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ArrayDifference { public static void main(String[] args) { String[] array1 = {"Hardware Docs","Customer Data","Customer Docs","Commit Reviews","Product Planning Docs","Business Operations ","Proprietary"}; String[] array2 = {"Hardware Docs","Customer Docs"}; // 将数组转换为Set,方便后续操作 Set<String> set1 = new HashSet<>(List.of(array1)); Set<String> set2 = new HashSet<>(List.of(array2)); // 获取仅在array1中存在的元素 Set<String> onlyInArray1 = new HashSet<>(set1); onlyInArray1.removeAll(set2); // 获取仅在array2中存在的元素(示例中为空,但通用场景需要考虑) Set<String> onlyInArray2 = new HashSet<>(set2); onlyInArray2.removeAll(set1); // 合并两个差集,得到所有不共有元素 List<String> result = new ArrayList<>(); result.addAll(onlyInArray1); result.addAll(onlyInArray2); System.out.println("不共有元素:" + result); } }
方法二:Java 8+ 流式操作(优雅简洁)
如果喜欢函数式编程风格,用Stream API写法更优雅,不过注意数据量大时性能不如Set方法(因为List.contains是O(n)级别):
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class ArrayDifferenceStream { public static void main(String[] args) { String[] array1 = {"Hardware Docs","Customer Data","Customer Docs","Commit Reviews","Product Planning Docs","Business Operations ","Proprietary"}; String[] array2 = {"Hardware Docs","Customer Docs"}; List<String> list2 = Arrays.asList(array2); // 筛选array1中不在array2的元素(可选distinct()去重) List<String> onlyInArray1 = Arrays.stream(array1) .distinct() .filter(item -> !list2.contains(item)) .collect(Collectors.toList()); // 筛选array2中不在array1的元素 List<String> onlyInArray2 = Arrays.stream(array2) .distinct() .filter(item -> !Arrays.asList(array1).contains(item)) .collect(Collectors.toList()); // 合并结果 List<String> result = new ArrayList<>(); result.addAll(onlyInArray1); result.addAll(onlyInArray2); System.out.println("不共有元素:" + result); } }
Python 实现方法
Python处理这类集合操作非常便捷,自带的集合方法就能一步到位:
方法一:直接用集合对称差集(简洁高效)
array1 = ["Hardware Docs","Customer Data","Customer Docs","Commit Reviews","Product Planning Docs","Business Operations ","Proprietary"] array2 = ["Hardware Docs","Customer Docs"] set1 = set(array1) set2 = set(array2) # 对称差集直接得到两个数组的不共有元素 symmetric_diff = set1.symmetric_difference(set2) # 转换为列表(按需使用) result = list(symmetric_diff) print("不共有元素:", result)
方法二:保留原数组顺序(如果需要)
集合是无序的,如果要保留元素在原数组中的出现顺序,可以用列表推导式配合去重:
array1 = ["Hardware Docs","Customer Data","Customer Docs","Commit Reviews","Product Planning Docs","Business Operations ","Proprietary"] array2 = ["Hardware Docs","Customer Docs"] set1 = set(array1) set2 = set(array2) # 保留array1中元素的顺序,筛选不在array2的元素 only_in_array1 = [item for item in array1 if item not in set2] # 保留array2中元素的顺序,筛选不在array1的元素 only_in_array2 = [item for item in array2 if item not in set1] # 合并后去重(Python 3.7+用dict.fromkeys可保留顺序) result = list(dict.fromkeys(only_in_array1 + only_in_array2)) print("不共有元素(保留顺序):", result)
内容的提问来源于stack exchange,提问作者Stack User
相关产品推荐
相关产品推荐

