You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:35:12