Как создать экземпляр Comparator внутри Конструктора - PullRequest
0 голосов
/ 15 октября 2011

Я никогда не видел компаратора, созданного внутри конструктора для структуры TreeMap.Как можно это сделать?Есть ли способ заставить конструктор TreeMap () вызвать другой конструктор TreeMap, который имеет аргумент компаратора для настройки компаратора?

private Comparator<? super K> cmp;
private Node root;
private int size;
private final String indentStr = "   ";

public TreeMap() {
    // Create cmp assuming K implements Comparator
    //???  TreeMap(new Comparator<V>());
}

public TreeMap(Comparator<? super K> cmp) {
    this.cmp = cmp;
}

1 Ответ

3 голосов
/ 15 октября 2011

Они обычно устанавливают эти поля на null, вместо того, чтобы что-то создавать.

Но если вы хотите, вы можете иметь:

this(new Comparator<K>() {
   public int compare(K k1, K k2) {
       return ((Comparable<K>) k1).compareTo(k2);
   }
});

Проблема в том, что ClassCastExceptionможет произойти, потому что вы не знаете тип элементов.

...