【发布时间】:2018-04-22 14:21:21
【问题描述】:
我编写了自己的 PriorityQueue 类来管理无限的元素。为此,我声明了一个 ArrayList,然后使用标准方法添加/交换其中的元素,但标题中出现错误。这是我的代码:
public class PriorityQueue<E extends Comparable<E>> {
private ArrayList<E> queue;
public PriorityQueue() {
queue= new ArrayList<>();
}
public <T> int size() {
return queue.size();
}
public <T> boolean isEmpty() {
return queue.isEmpty();
}
public <T> void insert(E element) {
queue.add(queue.size(), element);
siftUp(queue.size()-1);
}
public <T> void siftUp(int size) {
E elem = queue.get(size);
for (; size>0 && elem.compareTo(queue.get(size/2))==1; size=size/2)
queue.add(size, queue.get(size/2));
queue.add(size, elem);
}
}
我该如何解决? 编辑:从“T elem”更改为“E elem”,现在它可以编译,但插入两个相同的元素。
【问题讨论】:
-
insert应该声明为insert(E element),T在这里做什么? -
参数
T到底是什么? -
是用户声明的通用元素。它可以是一个int,一个字符串ecc...
-
嗯,你有一个苹果列表,你尝试在其中添加橘子。如果将队列声明为基于
E类型,则所有方法都应基于相同的E。 -
删除方法级别的
<T>,改用类级别的E。除此之外,它在 4 种方法中的 3 种中未使用。