使用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());}}}/*outputbabymyhello///
?
//********************************************************************************************************************************
先看看最普遍的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());}}}
?运行结果:
hellomybaby
?
以上是普通的队列。
?
注意注意:想想这样一种情况,在飞机场,当飞机临近起飞时,这架飞机的乘客可以插队先行登机。所以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:babyhellomy///
?
?