队列是数据结构中比较重要的一种类型,他支持先进先出,跟生活中的排队一样,这一点刚好和Stack(栈)相反。
Android中最熟悉的莫过于MessageQueue了,诺!就像下图这张图一样,从前面拿出来后面塞进去,android中有一个死循环在不停地搞这个事。
那么java中怎么玩这个呢,我们来写个简单的demo,等以后技术好了再来扩展一下。
public class TestQueue {最终打印出来的size为0,那就说明我们塞进去的元素已经全部remove掉了。
public static void main(String[] args) {
//实例化一个队列
Queue<String> queue = new LinkedList<>();
for (int i = 0; i < 100; i++) {
//添加一个元素到队列里面
queue.offer(i+"");
//我们在这里for each打印队列里面的元素
for (String string : queue) {
System.out.println("打印:"+string);
try {
Thread.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
//获取并remove队列的第一个元素
queue.poll();
}
//最后将队列的size打印一下
System.out.println(queue.size());
}
}
下面我们来熟悉一下Queue的几个常用的方法。
插入:add() / offer()
这里add和offer都是尾部添加,区别就是add添加失败(比如:queue满了)会抛出异常,而offer即使失败也不会挂掉,只是返回false。
移除: remove() / poll()
都是移除队列的第一个元素,区别在于当队列为空时,remove()抛出异常,而poll()返回一个空,所以这里我们得注意了,如果移除元素用的是poll()函数,那么千万的不要往队列里面插入null,否则你无法判断返回的null是不是队列为空还是获取的值为nul。
Examine:element() / peek()
这两个函数都是获取队列的第一个元素,但是不会移除元素,同样的当队列为空时element()抛出异常,而peek()返回一个null。
这里感谢老司机张拭心得文章: