Java中的入队,出队和ViewQueue
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的入队,出队和ViewQueue相关的知识,希望对你有一定的参考价值。
我在java中做队列。这是我的代码:
public class ListQueue {
public static void main(String[] args){
Queue myQueue;
Scanner sc = new Scanner(System.in);
String input;
int choice = 99;
do{
System.out.println("================");
System.out.println("Queue Operations Menu");
System.out.println("================");
System.out.println("1,Enquene");
System.out.println("2,Dequeue");
System.out.println("3,Empty?");
System.out.println("4,Count?");
System.out.println("5,View Queue");
System.out.println("0, Quit
");
System.out.println("Enter Choice:");
try{
choice = sc.nextInt();
switch(choice){
case 1:
System.out.println("Please enter name: ");
input = sc.next();
myQueue.enqueue(input);
System.out.println(input + "is successful queued");
break;
case 2:
if(myQueue.isEmpty()){
}
break;
case 3:
if(myQueue.isEmpty()){
System.out.println("Queue is empty");
}else{
System.out.println("Queue is not empty");
}
break;
case 4:
System.out.println("Number of people is " + "the queue" + myQueue.size());
break;
case 5:
if(!myQueue.isEmpty())
myQueue.viewQueue();
else
System.out.println("Queue is empty");
break;
case 0:
System.out.println("Good-bye");
break;
default:
System.out.println("Invalid choice");
}
}
catch(InputMismatchException e){
System.out.println("Please enter 1-5, 0 to quit");
sc.nextLine();
}
}while(choice != 0);
}
}
但是,我在enqueue()和viewQueue()中有错误,我想知道为什么。我是以错误的方式宣布队列吗?提前致谢。我是新人排队所以请耐心等待。
Java队列没有enqueue和dequeue方法,这些操作使用以下方法完成:
入队:
add(e)
:如果无法插入对象,则抛出异常offer(e)
:如果无法插入对象,则返回false
调度:
remove()
:如果队列为空则抛出异常poll()
:如果队列为空,则返回null
看一下队列中的第一个对象:
element()
:如果队列为空则抛出异常peek()
:如果队列为空,则返回null
Queue从Collection继承的add方法插入一个元素,除非它违反了队列的容量限制,在这种情况下它会抛出
IllegalStateException
。 offer方法仅用于有界队列,与add的不同之处仅在于它表示无法通过返回false来插入元素。
(见:http://docs.oracle.com/javase/tutorial/collections/interfaces/queue.html)
你也可以检查这个,因为这更有用:
http://docs.oracle.com/cd/B10500_01/appdev.920/a96587/apexampl.htm
您尚未初始化myQueue:
Queue myQueue;
请注意,Queue是一个抽象类,您需要将Queue初始化为适当的实现。
请参阅下面的javaDoc:
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Queue.html
@By如何循环通过队列内的元素?你能给我发一些例子 -
我刚刚在你的案例5中添加了一些功能:用于查看List元素。
case 5:
if(!myQueue.isEmpty())
{
for(Iterator it=myQueue.iterator();it.hasNext();)
System.out.println(it.next());
//or using as a Object in Enhanced for loop
//for (Object element : myQueue)
//System.out.println(element);
}
else
System.out.println("Queue is empty");
break;
正如莱曼霍姆斯建议你可以使用ArayDeque。
Queue<String> myQueue = new ArrayDeque<String>();
优点: - 它比Stack和LinkedList更快 - ArrayDeque没有容量限制,因此它们可以根据需要增长以支持使用。
风险: - 它们不是线程安全的;在没有外部同步的情况下。 - 它们不支持多线程的并发访问。
就像zerocool说你没有初始化Queue一样,因为Queue是一个接口,你不能直接实例化一个接口,你需要实例化一个实现Queue
接口的类,如ArrayDequeue
,LinkedList
等......
要初始化队列并摆脱错误,您需要这样的事情:
Queue<Integer> myQueue = new ArrayDeque<Integer>();
要么
Queue<String> myQueue = new LinkedList<String>();
Here's the API for the type of Queues you can instantiate
以上是关于Java中的入队,出队和ViewQueue的主要内容,如果未能解决你的问题,请参考以下文章