java - 比较器如何在内部工作?
问题描述
这对你来说可能听起来微不足道,但我很难想象比较器/array.sort。我们如何仅使用 2 个参数对完整数组进行排序?它在内部是如何工作的?
例如- Input -[5,3,2,6,8,10,1], Output- [1,2,3,5,6,8,10] 它在内部使用哪种算法?它首先比较哪两个对象?(5 比 3?)然后接下来的两个对象是什么?(5 比 2?)还是(3 比 2)?
public static void main(String[] args) {
Integer[] tring = new Integer[]{5,3,2,6,8,10,1};
lol(tring);
for(int i=0;i<tring.length;i++){
System.out.println(tring[i]);
}
}
public static void lol(Integer[] args) {
Arrays.sort(args,(h1,h2)->h1-h2);
}
解决方案
您可以像这样可视化该过程。
Integer[] tring = new Integer[] {5, 3, 2, 6, 8, 10, 1};
Comparator<Integer> comparator = (a, b) -> {
System.out.println(Arrays.toString(tring) + " comparing " + a + " and " + b);
return a.compareTo(b);
};
Arrays.sort(tring, comparator);
System.out.println(Arrays.toString(tring));
结果:
[5, 3, 2, 6, 8, 10, 1] comparing 3 and 5
[5, 3, 2, 6, 8, 10, 1] comparing 2 and 3
[5, 3, 2, 6, 8, 10, 1] comparing 6 and 2
[2, 3, 5, 6, 8, 10, 1] comparing 6 and 3
[2, 3, 5, 6, 8, 10, 1] comparing 6 and 5
[2, 3, 5, 6, 8, 10, 1] comparing 8 and 5
[2, 3, 5, 6, 8, 10, 1] comparing 8 and 6
[2, 3, 5, 6, 8, 10, 1] comparing 10 and 5
[2, 3, 5, 6, 8, 10, 1] comparing 10 and 8
[2, 3, 5, 6, 8, 10, 1] comparing 1 and 6
[2, 3, 5, 6, 8, 10, 1] comparing 1 and 3
[2, 3, 5, 6, 8, 10, 1] comparing 1 and 2
[1, 2, 3, 5, 6, 8, 10]
推荐阅读
- swift - 如何在 SWIFT 中更改 ViewController 后保留集合视图滚动位置
- javascript - 如何访问特定 JSON 格式的变量?
- c++ - 如何检查系统是否有足够的资源用于另一个线程?
- audio - 如何将同一文件夹中的所有音频文件同时转换为另一种格式
- javascript - 如何从 localStorage 获取项目并在我的 UI 中显示?
- sql - 为什么通过 PLSQL 代码块调用使用 REGEX_SUBSTR 的过程会返回一个额外的 '¬' 字符?
- html - 使用css拉伸内容以适应桌面页面
- php - Retrieve all the articles that link to an article in Wikipedia but only if the link appears in a certain section of the article
- python - How can I remove the additional text that is written twice in my server-client chat?
- azure - Azure 监控:MetricsAlert 与 AlertRules,在 Monitor 中看不到 AlertRules