Queue(队列)
Queue是一种先进先出(FIFO:First In First Out)的有序集合:
Queue是Collection的子接口,其定义如下
public interface Queue<E> extends Collection<E>
LinkedList实现了Queue的子接口,根据多态性可以使用Queue创建LinkedList实例。
Queue接口常用方法如下:
方法 | 类型 | 描述 |
---|---|---|
boolean offer(E e) | 普通方法 | 添加元素到队尾 |
E poll() | 普通方法 | 获取队首的元素并删除 |
E peek() | 普通方法 | 获取队首的元素但不删除 |
boolean offer(E e)
添加元素到队尾
栗子:
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("蛮子");
queue.offer(null);
queue.offer("喀什炒面");
Iterator<String> iterator = queue.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
程序运行结果:
蛮子
null
喀什炒面
注意,null是可以作为元素添加到集合中的。但我们要避免添加null进入集合。
E poll() 和 E peek()
获取队首元素并删除 和 获取队首元素但不删除
栗子:
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
queue.offer("蛮子");
queue.offer(null);
queue.offer("喀什炒面");
System.out.println(queue.poll());//获取队首元素并删除 再打印看看
System.out.println(queue.peek());//获取队首元素但不删除 再打印看看
System.out.println("迭代队列============");
Iterator<String> iterator = queue.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
程序运行结果:
蛮子
null
迭代队列============
null
喀什炒面
Stack(栈)
Stack是一种先进后出(LIFO:Last In First Out)的有序集合:
Stack类定义如下:
public class Stack<E> extends Vector<E>
不是接口,可以直接实例化使用。
Stack类常用方法如下:
方法 | 类型 | 描述 |
---|---|---|
public E push(E item) | 普通方法 | 将一个元素入栈 |
public synchronized E pop() | 同步方法 | 取出栈顶元素并删除 |
public synchronized E peek() | 同步方法 | 取出栈顶元素但不删除 |
public synchronized E pop()
取出栈顶元素并删除
栗子:
public static void main(String[] args) {
Stack<String> stack = new Stack<>();
stack.push("干脆面");
stack.push("咖啡");
stack.push("牙膏");
stack.push("卡牌");
stack.push("雨伞");
stack.push("剪刀");
stack.push("卷纸");
Thread t1 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
System.out.println(Thread.currentThread().getName() + stack.pop());
}
}
};
Thread t2 = new Thread() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
System.out.println(Thread.currentThread().getName() + stack.pop());
}
}
};
t1.start();
t2.start();
}
程序运行结果:
Thread-1卷纸
Thread-0剪刀
Thread-1雨伞
Thread-0卡牌
Thread-1牙膏
Thread-0咖啡
Thread-1干脆面
Exception in thread "Thread-0" java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at java.util.Stack.pop(Stack.java:84)
at moudle2.Test16$1.run(Test16.java:22)
从结果可以看出,同步方法保证了pop()独立性。并且栈空再取出会出现异常。
标签:queue,Java,拾贝,Thread,public,Queue,stack,Stack From: https://www.cnblogs.com/Ocraft/p/17809596.html