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

Java中如何创建含指定元素的ArrayList并添加到已声明列表?

解决ArrayList构造方法不匹配问题及threeSum代码修正

错误原因

Java标准库的ArrayList<Integer>没有接受多个int参数的构造方法,你写的new ArrayList<Integer>(a,nums[l],nums[r])不符合任何已有的构造方法签名,因此触发编译错误。

正确创建包含指定元素的ArrayList的方式

有三种常用写法可以实现需求:

  • 先创建空列表,再逐个添加元素:
ArrayList<Integer> triplet = new ArrayList<>();
triplet.add(a);
triplet.add(nums[l]);
triplet.add(nums[r]);
res.add(triplet);
  • 用Arrays.asList()生成临时列表后包装为ArrayList:
res.add(new ArrayList<>(Arrays.asList(a, nums[l], nums[r])));
  • Java 9及以上版本可使用List.of()生成不可变列表,再转为ArrayList:
res.add(new ArrayList<>(List.of(a, nums[l], nums[r])));

额外逻辑修正

你的代码中去重的while循环条件写反了,原条件nums[l] != nums[l-1]会错误跳过有效元素,应改为nums[l] == nums[l-1]才跳过重复值。

修正后的完整代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        int n = nums.length;
        List<List<Integer>> res = new ArrayList<>();
        Arrays.sort(nums);
        for(int i=0; i<n; i++) {
            if (i>0 && nums[i-1] == nums[i]) continue;
            int a = nums[i];
            int l = i+1, r = n-1;
            while (l<r) {
                int threeSum = a + nums[l] + nums[r];
                if (threeSum < 0) {
                    l++;
                } else if (threeSum > 0) {
                    r--;
                } else {
                    res.add(new ArrayList<>(Arrays.asList(a, nums[l], nums[r])));
                    l++;
                    // 修正后的去重逻辑:跳过重复的左指针元素
                    while (l < r && nums[l] == nums[l-1]) {
                        l++;
                    }
                }
            }
        }
        return res;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 17:22:14