public class MyQueue<T> {
private LinkedList<T> q = new LinkedList<T>();
/**
* 排队
* @param e
*/
public synchronized void put(T e) {//需要加上同步
q.addFirst(e);
}
/**
* 插队
* @param index
* @param e
*/
public synchronized void jumpPut(int index, T e){
q.add(index, e);
}
/**
* 放弃排队
* @param index
*/
public void giveUp(int index){
q.remove(index);
}
/**
* 排到窗口的人
* @return
*/
public T get(){
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return q.removeLast();
}
/**
* 是否还有人
* @return
*/
public Boolean isEmpty(){
return q.isEmpty();
}
@Override
public String toString() {
return q.toString();
}
}
public class MyQueueTest {
public static void main(String[] args) {
MyQueue<String> mq = new MyQueue<String>();
for(int i=0; i < 10; i++){
//排队
mq.put(i+"号");
}
//250号插队,插在6号后面
mq.jumpPut(3, "250号");
//7号放弃排队
mq.giveUp(2);
System.out.println("上班");
while(!mq.isEmpty()){
System.out.println("排队的人:"+mq.get());
}
System.out.println("下班");
}
}
执行上面代码输出结果为:
上班
排队的人:0号
排队的人:1号
排队的人:2号
排队的人:3号
排队的人:4号
排队的人:5号
排队的人:6号
排队的人:250号
排队的人:8号
排队的人:9号
下班
首先说下Java中的LinkedList,参考地址:http://blog.csdn.net/jzhf2012/article/details/8540543,在熟悉了LinkedList之后,在看上面的例子就更加容易理解了。