java - 比较器如何工作?
问题描述
我正在研究 Java 中的集合,在这两者之间,我被比较器困住了。在下面的代码中:
class MyComp implements Comparator<String> {
public int compare(String a, String b) {
String aStr, bStr;
aStr = a;
bStr = b;
// Reverse the comparison.
return bStr.compareTo(aStr);
}
// No need to override equals.
}
class CompDemo {
public static void main(String args[]) {
// Create a tree set.
TreeSet<String> ts = new TreeSet<String>(new MyComp());
// Add elements to the tree set.
ts.add("C");
ts.add("A");
ts.add("B");
ts.add("E");
ts.add("F");
ts.add("D");
// Display the elements.
for(String element : ts)
System.out.print(element + " ");
System.out.println();
}
}
我无法理解
public int compare(String a, String b)
第 2 行是否被覆盖?另外,TreeSet<String> ts = new TreeSet<String>(new MyComp())
线是什么意思?我读到了
Comparator 接口定义了两种方法:compare( ) 和 equals( )。
然后如何使用compareTo()。
- 元素是如何反转的?
如果有人对我上面描述的任何一点有答案,请继续。
解决方案
树集是一个排序集,即它对树集中的元素进行排序。现在,它是如何排序的?它使用比较器。即,在代码的某处,它使用它进行比较。
int cmp;
Entry<K,V> parent;
// split comparator and comparable paths
Comparator<? super K> cpr = comparator;
if (cpr != null) {
do {
parent = t;
cmp = cpr.compare(key, t.key);
if (cmp < 0)
t = t.left;
else if (cmp > 0)
t = t.right;
else
return t.setValue(value);
} while (t != null);
}
这是来自 TreeSet 源代码。
推荐阅读
- tensorflow - 烧瓶服务器启动后自动加载
- binary-tree - 关于二叉搜索树的问题(如何计算followers)
- php - laravel 同步无法保存数据
- c++ - OpenGL 只是渲染一个黑色方块
- python - 如何在pygame中调整图像大小以到达屏幕的顶部/底部?
- c++ - 在 C++20 中,在一个范围内计算相邻对的最简洁明了的方法是什么?
- javascript - 如何包装发射器.on(eventName)?
- android - 如何使用 C# SDK 为 Google Assistant 创建一个简单的“播放歌曲”意图
- php - 使用电子邮件地址从 MySQL 数据库中获取行的键值
- python - 为什么非常大的斐波那契数会创建椭圆形?