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

如何合并两个同类型对象列表并保留列表1的重复元素

嘿,这个合并列表的需求很清晰,咱们来一步步搞定它!

核心需求回顾

你需要:

  • 完全保留List1的所有元素(包括重复项)
  • 只把List2中List1里没有的元素补充进去
  • 最终元素顺序不需要严格和示例一致(咱们的实现会默认保留List1原有顺序,再追加新元素)
Python 实现方案

这是最常用的Python写法,效率和可读性都不错:

list1 = ['A', 'B', 'C', 'E']
list2 = ['A', 'D']

# 用集合快速判断元素是否存在(O(1)查找效率,比遍历列表快很多)
existing_items = set(list1)
# 先保留list1全部元素,再追加list2中不存在的元素
merged_list = list1 + [item for item in list2 if item not in existing_items]

print(merged_list)  # 输出: ['A', 'B', 'C', 'E', 'D']

额外测试场景(List1含重复元素)

如果List1是['A', 'A', 'B', 'C'],List2是['A', 'D', 'B'],运行后会得到['A', 'A', 'B', 'C', 'D']——完美保留了List1的重复项,只添加了List1没有的D。

Java 实现方案

如果用Java,思路完全一致,用HashSet做快速存在性检查:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ListMerger {
    public static void main(String[] args) {
        List<String> list1 = new ArrayList<>();
        list1.add("A");
        list1.add("B");
        list1.add("C");
        list1.add("E");
        
        List<String> list2 = new ArrayList<>();
        list2.add("A");
        list2.add("D");
        
        // 先拷贝list1到结果列表,确保原元素全部保留
        List<String> mergedList = new ArrayList<>(list1);
        Set<String> existingItems = new HashSet<>(list1);
        
        // 遍历list2,添加不存在的元素
        for (String item : list2) {
            if (!existingItems.contains(item)) {
                mergedList.add(item);
            }
        }
        
        System.out.println(mergedList); // 输出: [A, B, C, E, D]
    }
}
核心思路总结

不管用什么语言,核心逻辑都是这两步:

  1. 先把List1的所有元素原封不动放到结果里
  2. 用**集合(Set)**快速判断List2中的元素是否在List1里,只添加那些不存在的元素

用集合而不是直接遍历List1判断,是因为集合的查找效率远高于列表,当你的列表元素很多时,这个优化会很明显。

内容的提问来源于stack exchange,提问作者diAz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:13