bug
下面以一段代码说明
public int[][] insert(int[][] intervals, int[] newInterval) {
List<int[]> intervalList = Arrays.asList(intervals);
// bug
intervalList.add(newInterval);
Collections.sort(intervalList, (a, b) -> a[0] - b[0]);
List<int[]> result = new ArrayList<>();
for (int i = 0; i < intervalList.size(); i++) {
if (result.size() == 0 || result.get(result.size() - 1)[1] < intervalList.get(i)[0]) {
result.add(intervalList.get(i));
} else {
result.get(result.size() - 1)[1] = Math.max(result.get(result.size() - 1)[1], intervalList.get(i)[1]);
}
}
return result.toArray(new int[result.size()][2]);
}
运行时会触发下面的bug
其中21行就是这里报错
intervalList.add(newInterval);
分析
首先debug时发现一个细节
会出现new List()中的对象是java.util.Arrays.ArrayList
咱们点进去看看
这边没看到重写add()方法(remove也一样)
然后看下图,没重写就会报java.lang.UnsupportedOperationException
解决
将下面这个
List<int[]> intervalList = Arrays.asList(intervals);
改成
List<int[]> intervalList = new ArrayList<>(Arrays.asList(intervals));
debug时看到对象是java.util.ArrayList
这样就解决啦~