描述似乎有误+不理解LegacyMergeSort.userRequested返回True。
来源:5-4 探究Comparator的升序与降序
只能卷了
2022-11-15 23:45:12
问题描述:
这里说是ArrayList的sort方法
但我查看源码的时候发现这个是List中的sort
这里是不是描述有误?
这个是ArrayList的sort
还有一个问题就是在调用Arrays.sort去给List排序时,先判断了传入的Comparator是否为null,不为null再判断一个叫
LegacyMergeSort.userRequested
的东西。userRequested貌似通过匿名内部类的方式去赋值。
但是方法的文档说
> Old merge sort implementation can be selected (for compatibility with broken comparators) using a system property
也就是要使用一个系统属性。这是什么系统属性?为什么课程中直接就说调用legacyMergeSort?
而不是调用优化后的TimSort.Sort?
那个doPrivileged也是个native的方法。最后调用的booleanValue时Boolean类中的方法,那可不可以理解为doPrivileged返回的是个布尔包装类对象?那为什么返回的这个对象的值就是True呢?就像上面课程里的笔记,是True才调用LegacyMergeSort。
(谢谢)
1回答
同学你好~
1.同学截图中的源码有误,当代码运行时,会根据多态的特性执行ArrayList中的sort方法,而不是List接口中的。
2.系统属性是指虚拟机设置参数,即JVM参数。课程中主要是解释比较器在sort中的应用,如果展开讲解虚拟机参数,会导致重点不明。并且虚拟机参数涉及大量底层知识,不利于同学们的理解。
3.doPrivileged方法返回的是基本数据类型的布尔值,即boolean类型,而不是包装类型Boolean。
4.修改虚拟机参数之后,可以强制采用经典算法,即LegacyMergeSort。
5.由于现在的版本可能更多的是在使用Tim Peter为Python设计的排序算法,即TimSort。
感谢同学的反馈,后续老师会根据最新的算法对本章节进行优化。
祝学习愉快~
相似问题
回答 1
回答 1