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

查找仅在恰好2个相同ArrayList中出现的两个1~10整数

嘿,这个需求我get到了!你要找的是两个数字,它们不仅都只出现在2个列表里,而且这两个列表还完全一模一样,对吧?我给你整理了个清晰的解决思路,再附上Java代码示例,应该能帮你搞定:

核心解决思路

其实关键就是先给每个数字“绑定”它所在的所有列表,再按共享的列表集合来分组,具体分四步:

  • 第一步:统计每个数字的出现列表
    遍历所有ArrayList,用一个映射表记录每个数字出现在哪些列表里(可以用列表的索引或者自定义名称来标识列表)。
  • 第二步:筛选目标数字
    只保留那些恰好出现在2个列表里的数字,毕竟你的需求限定了是“仅出现在2个列表”的数字。
  • 第三步:按共同列表分组
    把筛选后的数字,按照它们共享的列表集合来分组——比如所有都在List1和List4里的数字会被分到同一组。
  • 第四步:提取符合条件的数字对
    只要分组里有至少2个数字,那这些数字就是你要找的,对应的分组key就是它们共同的列表。
Java代码示例
import java.util.*;

public class NumberListMatcher {
    public static void main(String[] args) {
        // 模拟你的9个ArrayList,这里填的是示例数据,你可以替换成自己的列表
        List<List<Integer>> allLists = new ArrayList<>();
        allLists.add(Arrays.asList(2, 3, 5));       // 列表0(对应你的List1)
        allLists.add(Arrays.asList(1, 4, 6));       // 列表1(对应你的List2)
        allLists.add(Arrays.asList(7, 8, 9));       // 列表2(对应你的List3)
        allLists.add(Arrays.asList(2, 3, 10));      // 列表3(对应你的List4)
        allLists.add(Arrays.asList(1, 5, 7));       // 列表4(对应你的List5)
        allLists.add(Arrays.asList(4, 6, 8));       // 列表5(对应你的List6)
        allLists.add(Arrays.asList(9, 10, 2));      // 列表6(对应你的List7)
        allLists.add(Arrays.asList(3, 5, 7));       // 列表7(对应你的List8)
        allLists.add(Arrays.asList(1, 4, 9));       // 列表8(对应你的List9)

        // 步骤1:统计每个数字所在的列表索引集合
        Map<Integer, Set<Integer>> numberToLists = new HashMap<>();
        for (int listIndex = 0; listIndex < allLists.size(); listIndex++) {
            List<Integer> currentList = allLists.get(listIndex);
            for (int num : currentList) {
                // 自动初始化空集合,避免空指针
                numberToLists.computeIfAbsent(num, k -> new HashSet<>()).add(listIndex);
            }
        }

        // 步骤2:筛选出仅出现在2个列表中的数字
        Map<Integer, Set<Integer>> filteredNumbers = new HashMap<>();
        for (Map.Entry<Integer, Set<Integer>> entry : numberToLists.entrySet()) {
            if (entry.getValue().size() == 2) {
                filteredNumbers.put(entry.getKey(), entry.getValue());
            }
        }

        // 步骤3:按共享的列表集合分组数字
        Map<Set<Integer>, List<Integer>> listGroupToNumbers = new HashMap<>();
        for (Map.Entry<Integer, Set<Integer>> entry : filteredNumbers.entrySet()) {
            int num = entry.getKey();
            Set<Integer> listSet = entry.getValue();
            listGroupToNumbers.computeIfAbsent(listSet, k -> new ArrayList<>()).add(num);
        }

        // 步骤4:输出最终结果
        System.out.println("符合条件的数字对及所在列表:");
        for (Map.Entry<Set<Integer>, List<Integer>> entry : listGroupToNumbers.entrySet()) {
            List<Integer> matchedNumbers = entry.getValue();
            Set<Integer> targetLists = entry.getKey();
            // 只输出有至少2个数字的分组(满足你找两个数字的需求)
            if (matchedNumbers.size() >= 2) {
                // 如果需要显示列表名称而非索引,你可以提前建一个索引到名称的映射表
                System.out.printf("数字:%s,共同出现在列表索引:%s%n", matchedNumbers, targetLists);
            }
        }
    }
}
小提示
  • 如果不想用列表索引,而是想用自定义名称(比如List1、List4),可以加一个Map<Integer, String> listNameMap,比如listNameMap.put(0, "List1"),输出的时候把索引转换成对应名称就行。
  • 如果有多个数字共享同一组2个列表,代码也能一并输出,比如三个数字都符合条件的话,也会显示出来。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:52:47