【问题标题】:The method getFirst() is undefined for the type Queue<Vertex>Queue<Vertex> 类型的方法 getFirst() 未定义
【发布时间】:2016-03-27 14:29:12
【问题描述】:
@Override
public Vertex next() {
   Queue<Vertex> nV = new LinkedList<Vertex>(graph.getNeighbours(this.sV));
   System.out.println(nV.getFirst());
   return nV.getFirst();
}

上面我声明了一个队列nV,它是一个由链接列表实例化的队列。 LinkedList 类型应该有方法getFirst(),为什么这个程序不允许呢?我什至可以使用pop,因为如果可能的话,它是一个队列,但不确定是否也有效。

ERROR at solution.java (at line 42)
return nV.getFirst();
          ^^^^^^^^
The method getFirst() is undefined for the type Queue<Vertex>

【问题讨论】:

  • 但是您引用了 Queue,而不是 LinkedList。如果您想使用特定于LinkedList 的方法,请将nV 更改为LinkedList&lt;Vertex&gt;
  • @Tunaki 请阅读我的问题并尝试理解我的困惑,我知道队列没有该死的 getFirst 方法,当我将其实例化为 Linkedlist 时,我对类型感到困惑所以认为应该可以访问该类型。我想我会尝试第一个 cmets 建议

标签: java collections linked-list queue


【解决方案1】:

我相信您正在寻找的方法是peek 方法。 peek 方法返回队列的第一个元素,而不将其从队列中删除。但是,如果您确实希望从队列中删除第一个元素,请使用 remove 方法,该方法从队列中取出一个元素。

nV.getFirst() 更改为nV.peek()nV.remove()

【讨论】:

    【解决方案2】:

    您正在将 LinkedList 实例分配给 Queue 类型的指针,该指针不公开 getFirst() 方法,请尝试以下操作:

    @Override
    public Vertex next() {
     LinkedList<Vertex> nV = new LinkedList<Vertex>(graph.getNeighbours(this.sV));
     System.out.println(nV.getFirst());
     return nV.getFirst();
    }
    

    LinkedList类实现了Queue接口,但是getFirst()方法继承自Deque,其实你也可以这样做

    Deque nV = new LinkedList<Vertex>(graph.getNeighbours(this.sV));
    

    获得 getFirst() 方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-23
      • 2016-06-07
      • 2021-06-19
      • 2014-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多