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
相关产品推荐
相关产品推荐

