publicclassThreeSum{ public List<List<Integer>> getthreeSum(int[] nums){ Arrays.sort(nums);//对数组进行排序 List<List<Integer>> list=new ArrayList<>(); for(int k=0;k<nums.length-2;k++){//固定一个k,判断i,j if(nums[k]>0) break;//num[k]>0则直接跳出 if(k>0&&nums[k]==nums[k-1]) continue;//对k,当前nums[k]和前一个元素nums[k-1]相等的话,为避免重复跳过。 int i=k+1,j=nums.length-1; while (i<j){//i,j相遇则跳出循环 int sum=nums[k]+nums[i]+nums[j]; if(sum<0){ while (i<j&&nums[i]==nums[++i]);//和小于0,则i++。另外此处的while很巧妙,对nums[i]与下一个元素nums[++i]相等的情况直接跳过。while之后直接到了一个新的nums[i]元素。 }elseif(sum>0){ while (i<j&&nums[j]==nums[--j]);//此处j与上同。 }else { list.add(new ArrayList<Integer>(Arrays.asList(nums[k],nums[i],nums[j])));//else情况sum==0,加入list。 while (i<j&&nums[i]==nums[++i]);//继续++i,--j直到i==j。 while (i<j&&nums[j]==nums[--j]); } } } //多个ArrayList遍历输出 for (Iterator it = list.iterator(); it.hasNext();) { System.out.println(it.next()); }