经典题解
1、返回一个空的二维数组
2、自定义排序,重写compare方法
针对二维数组进行排序
2.1、new Comparator<int[]>() { ... }
匿名 Comparator 类:这个部分创建了一个匿名类,实现了 Comparator接口。Comparator接口用于定义自定义的比较规则。
int[]:Comparator<int[]> 表示这个比较器用于比较 int[] 类型的数组。
2.2public int compare(int[] interval1, int[] interval2) { ... }
compare方法:Comparator 接口要求实现compare方法,用于比较两个对象。在这里,是比较两个int[] 数组,即两个区间。(与上面要对应)
1.1、return interval1[0] - interval2[0];
(如果返回正值,那么靠近return的那个值就排后面,反之排前面)
interval1[0] 和 interval2[0]:这两个表达式分别获取两个区间的起始值(即第一个元素)。
比较逻辑:interval1[0] - interval2[0] 的结果决定了排序顺序:
正值:如果interval1[0] > interval2[0],返回一个正值,表示interval1应该排在interval2之后。
零:如果 interval1[0] == interval2[0],返回 0,表示它们在排序上是等价的。
负值:如果 interval1[0] < interval2[0],返回一个负值,表示 interval1 应该排在 interval2 之前。
3、修改利用get得到的链表元素,链表上原来的数值是会改变的
4、将一个存储数组的链表转化为一个二维数组
New int[Merge.size()][]是生成一个新的二维数组,用来接收merge的转换
为什么必须加上这一句
类型正确性:toArray(T[] a) 确保返回的数组类型与传入的数组类型一致。在没有类型擦除的情况下,这是保证类型安全的一个重要手段。如果没有传入这个数组,toArray 方法只能返回一个 Object[],这在强类型的场景下是不合适的。
性能优化:传入一个长度适合的数组,避免了 toArray 方法内部创建新数组的开销。
总结
这行代码 return merged.toArray(new int[merged.size()][]); 通过传入一个长度与 merged 列表大小相同的 int[][] 数组,确保返回的数组类型正确,并且在性能上也是优化的。通过这种方式,可以有效地将 List<int[]> 转换为 int[][],满足方法的返回类型要求。