例子参照:http://www.cnblogs.com/linjiqin/archive/2013/09/06/3305906.html
1:栈
手枪的弹夹,先进后出;在栈顶进行数据的插入与删除;
package com.xxx.cn;
import java.util.LinkedList;
/**
* 用linklist实现栈 栈先进后出
* @author yangwangang
*
*/
public class TestLinkList<T> {
private LinkedList<T> list = new LinkedList<T>();
//入栈
public void push(T t){
list.addFirst(t);
}
//出栈不删除
public T peek(){
return list.getFirst();
}
//出栈删除
public T pop(){
return list.removeFirst();
}
public boolean isEmpty(){
return list.isEmpty();
}
public String toString(){
return list.toString();
}
}
就像简介客服专线,当所有客服都在忙(队列满了),那么阻塞等待,空闲的客服。阻塞的过程;
package com.xxx.cn;
import java.util.LinkedList;
import java.util.Queue;
/**
* 队列 先进先出
*
* @author yangwangang
*
*/
public class TestQueue<T> {
private Queue<T> queue = new LinkedList<T>();
// 将数据插入队尾
public void offer(T t) {
queue.offer(t);
}
// 返回队列的头,如果队列为空,返回null 不移除
public T peek() {
return queue.peek();
}
// 返回队列的头,如果队列为空,抛出异常 不移除
public T element() {
return queue.element();
}
// 移除返回队列的头,如果队列为空返回null
public T poll() {
return queue.poll();
}
// 移除返回队列的头,如果队列为空抛出异常
public T remove() {
return queue.remove();
}
// 队列是否为空
public boolean empty() {
return queue.isEmpty();
}
}
3:Queue:
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
队列是一种数据结构.它有两个基本操作:在队列尾部加人一个元素,和从队列头部移除一个元素就是说,队列以一种先进先出的方式管理数据,如果你试图向一个 已经满了的阻塞队列中添加一个元素或者是从一个空的阻塞队列中移除一个元索,将导致线程阻塞.在多线程进行合作时,阻塞队列是很有用的工具。工作者线程可 以定期地把中间结果存到阻塞队列中而其他工作者线线程把中间结果取出并在将来修改它们。队列会自动平衡负载。如果第一个线程集运行得比第二个慢,则第二个 线程集在等待结果时就会阻塞。如果第一个线程集运行得快,那么它将等待第二个线程集赶上来。下表显示了jdk1.5中的阻塞队列的操作:
3:Collection 接口有两个接口,list与set接口;
list(列表)实现类:array list(数组实现,查询块), linked list(双向链表实现,增删改快), vector(类似array list 线程同步);
set(集合)实现类:HashSet(无序,无重复,希策略来实现,底层通过hash map实现),linkedhashset(有序,无重复,双向链表实现,底层使用linkedhashmap实现);
map(映射),与collection接口没有多大的卵关系;map是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象;
参考:http://blog.youkuaiyun.com/speedme/article/details/22398395