java list 作为queue_数据结构 - 如何在java中实例化Queue对象?

数据结构 - 如何在java中实例化Queue对象?

当我尝试:

Queue q = new Queue();

编译器给我一个错误。 有帮助吗?

另外,如果我想初始化队列,我是否必须实现队列的方法?

8个解决方案

139 votes

Queue是一个接口,这意味着您无法直接构造AbstractQueue。

最佳选择是构造已经实现Queue接口的类,如下所示之一:AbstractQueue,ArrayBlockingQueue,ConcurrentLinkedQueue,DelayQueue,LinkedBlockingQueue,LinkedList,PriorityBlockingQueue,PriorityQueue或SynchronousQueue。

另一种方法是编写自己的类来实现必要的Queue接口。 除非在极少数情况下您希望在为程序的其余部分提供Queue时执行某些特殊操作,否则不需要它。

public class MyQueue implements Queue {

public T element() {

... your code to return an element goes here ...

}

public boolean offer(T element) {

... your code to accept a submission offer goes here ...

}

... etc ...

}

一个更少使用的替代方法是构造一个实现Queue的匿名类。您可能不想这样做,但为了覆盖所有基础,它被列为一个选项。

new Queue() {

public Tree element() {

...

};

public boolean offer(Tree element) {

...

};

...

};

Edwin Buck answered 2019-05-26T03:29:07Z

138 votes

Queue是一个界面。 除非通过匿名内部类,否则无法直接实例化接口。 通常,这不是您想要为集合做的事情。 而是选择现有的实现。 例如:

Queue q = new LinkedList();

要么

Queue q = new ArrayDeque();

通常,您可以通过您感兴趣的性能和并发特性来选择集合实现。

Jon Skeet answered 2019-05-26T03:29:43Z

40 votes

Queue qe=new LinkedList();

qe.add("b");

qe.add("a");

qe.add("c");

由于Queue是一个接口,因此您无法如图所示创建它的实例

Jigar Joshi answered 2019-05-26T03:30:13Z

14 votes

Queue是一个接口,您无法显式构造Queue,您必须实例化其中一个实现类。 就像是:

Queue linkedList = new LinkedList();

这是关于此主题的Java教程的链接。

zmf answered 2019-05-26T03:30:48Z

9 votes

ByzWn.png

Queue接口扩展了java.util.Collection以及其他插入,提取和检查操作,如:

+element(): E boolean //插入元素

+element(): E //检索元素,如果queue为空,则返回NULL

+element(): E //检索并删除元素,如果队列为空则抛出异常

+element(): E //检索但不移除此队列的头部,如果此队列为空,则返回null。

+element(): E //如果队列为空,则检索但不移除此队列的头部会抛出异常。

实现队列的示例代码:

java.util.Queue queue = new LinkedList<>();

queue.offer("Hello");

queue.offer("StackOverFlow");

queue.offer("User");

System.out.println(queue.peek());

while (queue.size() > 0){

System.out.println(queue.remove() + " ");

}

//Since Queue is empty now so this will return NULL

System.out.println(queue.peek());

输出代码:

Hello

Hello

StackOverFlow

User

null

devDeejay answered 2019-05-26T03:32:07Z

6 votes

Queue是java中的一个接口,你不能这样做。

相反,你有两个选择:

选项1:

Queue Q = new LinkedList<>();

选项2:

Queue Q = new ArrayDeque<>();

我建议使用option2,因为它比另一个快一点

Sujit answered 2019-05-26T03:33:06Z

5 votes

Java中的队列被定义为一个接口,许多现成的实现作为JDK发布的一部分存在。这里有一些:LinkedList,Priority Queue,ArrayBlockingQueue,ConcurrentLinkedQueue,Linked Transfer Queue,Synchronous Queue等。

因此,您可以创建任何这些类并将其保存为队列引用。 例如

import java.util.LinkedList;

import java.util.Queue;

public class QueueExample {

public static void main (String[] args) {

Queue que = new LinkedList();

que.add("first");

que.offer("second");

que.offer("third");

System.out.println("Queue Print:: " + que);

String head = que.element();

System.out.println("Head element:: " + head);

String element1 = que.poll();

System.out.println("Removed Element:: " + element1);

System.out.println("Queue Print after poll:: " + que);

String element2 = que.remove();

System.out.println("Removed Element:: " + element2);

System.out.println("Queue Print after remove:: " + que);

}

}

您还可以实现自己的自定义Queue实现Queue接口。

Java Guru answered 2019-05-26T03:33:49Z

4 votes

Queue是java中的一个接口,你无法做到这一点。尝试:

Queue Q = new LinkedList();

lcl answered 2019-05-26T03:34:24Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值