找不到使用泛型添加(int,T)的合适方法

时间:2018-04-22 14:21:21

标签: java sorting tree queue

我编写了自己的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”,现在编译,但插入两个相同的元素。

1 个答案:

答案 0 :(得分:0)

// perhaps this what you meant to do... Maybe? Kinda?
public class PriorityQueue<E> extends Comparable<E>
{
    private ArrayList<E> queue = new ArrayList<E>();

    public PriorityQueue() { }

    public int size()         { return queue.size(); }

    public boolean isEmpty()  { return queue.isEmpty(); }

    public void insert(E element) {
        queue.add(queue.size(), element);
        siftUp(queue.size() - 1);
    }


    public 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);
    }
}