我寫了下面這么段代碼
List<Integer> il = Arrays.asList(-10,-8,-6,0,1,2,4,6,7,8);
List<Integer> il1 = new ArrayList<>(il);
System.out.println(il.add(3));
結(jié)果就報錯了夺鲜,馬有失蹄坏逢,人有失手啊险毁,確實是我基礎(chǔ)差了
看看asList的源碼
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
我以為返回了個new ArrayList
看看調(diào)試信息
其實這里返回的是個內(nèi)部類
java.util.Arrays.ArrayList
和我們常用的
java.util.ArrayList
壓根不是一個
起因:
為啥發(fā)現(xiàn)這個
在做一道leetcode的時候:3Sum
寫了這么一段代碼
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
HashSet<List<Integer>> result = new HashSet<>();
Arrays.sort(nums);
int len = nums.length;
for (int i = 0; i < len - 2 && nums[i] <= 0; i++) {
int low = i+1;
int high = len-1;
for (; low < high; ) {
int sum = nums[low]+nums[high];
if (sum == -nums[i]) {
//!!!!!!!!!!!!!!!!!就是這里,就是這里,就是這里,就是這里,就是這里,就是這里,就是這里,就是這里,
result.add(Arrays.asList(nums[i], nums[low], nums[high]));
low++;
high--;
}else
if (sum < -nums[i]) {
low++;
}else {
high--;
}
}
}
return new ArrayList<>(result);
}
}
看上去還不錯稚瘾,但是運行速度卻很慢
后來把
result.add(Arrays.asList(nums[i], nums[low], nums[high]));
改成
result.add(new ArrayList<Integer>(Arrays.asList(nums[i], nums[low], nums[high])));
就好多了