首页 > 解决方案 > 比较器如何工作?

问题描述

我正在研究 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();
   }
  }
  1. 我无法理解public int compare(String a, String b)第 2 行是否被覆盖?另外,TreeSet<String> ts = new TreeSet<String>(new MyComp())线是什么意思?

  2. 我读到了

Comparator 接口定义了两种方法:compare( ) 和 equals( )。

然后如何使用compareTo()

  1. 元素是如何反转的?

如果有人对我上面描述的任何一点有答案,请继续。

标签: javacomparator

解决方案


树集是一个排序集,即它对树集中的元素进行排序。现在,它是如何排序的?它使用比较器。即,在代码的某处,它使用它进行比较。

    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 源代码。


推荐阅读