我正在尝试将ConcurrentSkipListMap子类化并设置它的Comparator而没有任何锁定。 这就是我所拥有的:
// 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>());
如您所见,我在Queue类中添加了3个构造函数。无论我在主类中改变什么,其他构造函数都会产生错误。什么是正确的设置方法? 谢谢
答案 0 :(得分:3)
第二个构造函数是垃圾。删除它。
并且您的代码无法编译,因为您使用MYCLASS作为键并使用Integer作为值来构建队列,但是提供一个比较器来排序Integer实例而不是MYCLASS实例。
我想你想要的是整数作为关键。如果是,那么队列的类型应该是Queue。
或者您可以尊重首先放置键和后面的值的约定,并将队列声明更改为
public class Queue<K, V> extends ConcurrentSkipListMap<K, V> {
请注意,子类集合通常是个坏主意。将集合封装在对象中通常会更好。