看《Java编程思想》时的笔记。
应用LinkedList实现的能多线程的栈与队列。
import java.util.LinkedList;
class Msg{
String s;
public Msg(String s) {
// TODO 自动生成的构造函数存根
this.s = s;
}
public String toString(){
return s;
}
}
class MyStack{
private LinkedList<Msg> mMyStack;
public MyStack() {
// TODO 自动生成的构造函数存根
mMyStack = new LinkedList<Msg>();
}
public boolean put(Msg msg){
synchronized (mMyStack) {
mMyStack.addLast(msg);
}
return true;
}
public Msg get(){
Msg msg;
synchronized (mMyStack) {
if(mMyStack.isEmpty()){
msg = null;
}else{
msg = mMyStack.removeLast();
}
}
return msg;
}
public boolean isEmpty(){
return mMyStack.isEmpty();
}
}
class MyQueue{
private LinkedList<Msg> mMyStack;
public MyQueue() {
// TODO 自动生成的构造函数存根
mMyStack = new LinkedList<Msg>();
}
public boolean put(Msg msg){
synchronized (mMyStack) {
mMyStack.addLast(msg);
}
return true;
}
public Msg get(){
Msg msg;
synchronized (mMyStack) {
if(mMyStack.isEmpty()){
msg = null;
}else{
msg = mMyStack.removeFirst();
}
}
return msg;
}
public boolean isEmpty(){
return mMyStack.isEmpty();
}
}
从代码可以看出使用LinkedList很方便,思路也很清晰。LinkedList与ArrayList都实现了List接口。使用LinkedList而不是ArrayList的好处在于,基于链表比基于数组的实现在具有频繁插入和删除的情况下更为高效。栈与队列一个是头进头出,另一个是头进尾出,他们有频繁地插入删除操作。所以用LinkedList实现栈与队列非常适合。