【问题标题】:no suitable method found for add(int,T) with Generics没有找到适合泛型的 add(int,T) 的方法
【发布时间】: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
  • 删除方法级别的&lt;T&gt;,改用类级别的E。除此之外,它在 4 种方法中的 3 种中未使用。

标签: java sorting tree queue


【解决方案1】:
// 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);
    }
}

【讨论】:

  • 哦...我觉得自己很愚蠢...在我的辩护中,我整天都在使用泛型,但是...实际上...我从不声明或创建自己的...对不起!跨度>
  • 我使用的几乎 100% 的实例化类都来自 java.until。* 我自己不写任何“instiaible 对象”...主要重用 Vector、Stack、TreeSet、TreeMap、Hashrable。 ...(因此,我忘记了 java 编译器实际上是如何使用 的...但是,确实,在查看了@Radiodef 提供的链接之后...问题似乎在滥用 ...
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 2016-09-24
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多