Как создать экземпляр компаратора внутри конструктора

#java #comparator #treemap

#java #компаратор #древовидная карта

Вопрос:

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

 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:

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

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

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

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

Комментарии:

1. Как насчет return ((Comparable<K>) k1).compareTo(k2); ?

2. ClassCastException? Конечно, вы можете это сделать, но это может привести к сбою. Я все равно добавил его в ответ