使用LinkedList实现Stack跟Queue
使用LinkedList实现Stack和Queue
虽然在java.util包中有Stack,但是不赞成使用。建议使用如下的Stack !!!
先看看是如何实现的:
package com.wjy.linkedlist.stack; import java.util.LinkedList; public class Stack<T> { private LinkedList<T> storage=new LinkedList<T>(); public void push(T t){ storage.addFirst(t); } public T peek(){ return storage.getFirst(); } public T pop(){ return storage.removeFirst(); } public boolean isEmpty(){ return storage.isEmpty(); } public String toString(){ return storage.toString(); } }
看看测试代码:
package com.wjy.linkedlist.stack; public class MainTest { public static void main(String args[]){ Stack<String> myStack=new Stack<String>(); for(String item : "hello my baby".split(" ")){ myStack.push(item); } while(!myStack.isEmpty()){ System.out.println(myStack.pop()); } } } /*output baby my hello ///
//********************************************************************************************************************************
先看看最普遍的Queue,是java.util包中的。需要LinkedList来实例化它:
package com.wjy.linkedlist.queue; import java.util.LinkedList; import java.util.Queue; public class QueueTest { public static void main(String args[]){ Queue<String> myQueue=new LinkedList<String>(); for(String item : "hello my baby".split(" ")){ myQueue.offer(item); } while(!myQueue.isEmpty()){ System.out.println(myQueue.poll()); } } }
运行结果:
hello my baby
以上是普通的队列。
注意注意:想想这样一种情况,在飞机场,当飞机临近起飞时,这架飞机的乘客可以插队先行登机。所以PriorityQueue就是为了这种情形设计的。
但是注意:Integer,String和Character可以和PriorityQueue一起使用的原因是:这些类已经内建了自然排序。如果你想在PriorityQueue中使用自己的类,就必须包括额外的功能以产生自然排序,或者必须提供自己的Comparator。
看看PriorityQueue的使用:
package com.wjy.priorityQueue; import java.util.PriorityQueue; public class PriorityQueueTest { public static void main(String args[]){ PriorityQueue<String> myQueue=new PriorityQueue<String>(); for(String item : "hello my baby".split(" ")){ myQueue.offer(item); } while(!myQueue.isEmpty()){ System.out.println(myQueue.poll()); } } } /*Output: baby hello my ///