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

合并两个String ArrayList并排序的方法返回重复元素,求排查

合并两个字符串ArrayList时元素重复的问题解决

问题根源

你代码里合并两个列表的嵌套for循环逻辑完全错误:

for (int i = 0; i < list1.size(); i++) {
    for (int j = 0; j < list2.size(); j++) {
        newList.add(list1.get(i));
        newList.add(list2.get(j));
    }
}

这段嵌套循环会让list1中的每个元素被重复添加list2.size()次,同时list2中的每个元素也被重复添加list1.size()次。比如你的测试用例里两个列表各有3个元素,最终newList里会生成3*2*3=18个元素,和报错结果完全对应。

修正方案

合并两个列表应该用两个独立的for循环,分别遍历两个列表并添加元素,而非嵌套循环:

public static ArrayList<String> mergeStrings(ArrayList<String> list1, ArrayList<String> list2) {
    ArrayList<String> newList = new ArrayList<String>();
    
    // 先添加list1的所有元素
    for (int i = 0; i < list1.size(); i++) {
        newList.add(list1.get(i));
    }
    // 再添加list2的所有元素
    for (int j = 0; j < list2.size(); j++) {
        newList.add(list2.get(j));
    }
            
    String temp;
    // 你的排序逻辑是正确的,无需修改
    for (int i = 0; i < newList.size(); i++) {
        for (int j = i + 1; j < newList.size(); j++) {
            if (newList.get(i).compareTo(newList.get(j)) > 0) {
                temp = newList.get(i);
                newList.set(i, newList.get(j));
                newList.set(j, temp);
            }
        }
    }
    return newList;
}

验证结果

修正后运行你的JUnit测试用例,newList会先得到[ant, elephant, camel, deer, bear, frog],再经过排序后生成预期的[ant, bear, camel, deer, elephant, frog],与测试用例的预期结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:25:28