Как подкласс ConcurrentSkipListMap и установить его компаратор?

#java #subclass

#java #подкласс

Вопрос:

Я пытаюсь подкласс ConcurrentSkipListMap и установить его компаратор без какой-либо блокировки. Вот что у меня есть :

 // the subclass 
public class Queue<V, K> extends ConcurrentSkipListMap<K, V> {

    public Queue(Comparator<? super K> queueComparator) {
        // TODO Auto-generated constructor stub
        super(queueComparator);
    }

    public Queue(QueueComparator<Integer> queueComparator) {
        // TODO Auto-generated constructor stub
        super((Comparator<? super K>) queueComparator);
    }

}
//the comparator (QueueComparator)
public class QueueComparator<T> implements Comparator<T> {

    @Override
    public int compare(T o1, T o2) {
        // TODO Auto-generated method stub
        return 0;
    }

}

// main class init the subclass

Queue queue= new Queue<Integer,MYCLASS>(new QueueComparator<Integer>());
 

Как вы можете видеть, я добавил 3 конструктора в класс Queue. Независимо от того, что я изменяю в основном классе, другие конструкторы выдают ошибку. Как правильно настроить его правильно?
Спасибо

Ответ №1:

Второй конструктор — мусор. Удалите его.

И ваш код не компилируется, потому что вы создаете очередь с MYCLASS в качестве ключа и Integer в качестве значения, но предоставляете компаратор, который сортирует экземпляры Integer вместо экземпляров MYCLASS.

Я предполагаю, что то, что вы хотите, — это целое число в качестве ключа. Если это так, то тип очереди должен быть Queue .

Или вы могли бы соблюдать соглашение о размещении ключа первым, а значения — после, и изменить объявление очереди на

 public class Queue<K, V> extends ConcurrentSkipListMap<K, V> {
 

Обратите внимание, что обычно это плохая идея для подклассов коллекций. Обычно лучше инкапсулировать коллекцию в объект.