JAVA Queue的简单实现

时间:2022-05-03 23:50:05

队列是数据结构中比较重要的一种类型,他支持先进先出,跟生活中的排队一样,这一点刚好和Stack(栈)相反。

Android中最熟悉的莫过于MessageQueue了,诺!就像下图这张图一样,从前面拿出来后面塞进去,android中有一个死循环在不停地搞这个事。

JAVA Queue的简单实现

那么java中怎么玩这个呢,我们来写个简单的demo,等以后技术好了再来扩展一下。


public class TestQueue {
    
    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());
        
    }

}
最终打印出来的size为0,那就说明我们塞进去的元素已经全部remove掉了。

下面我们来熟悉一下Queue的几个常用的方法。

JAVA Queue的简单实现

插入:add()  /  offer()
这里add和offer都是尾部添加,区别就是add添加失败(比如:queue满了)会抛出异常,而offer即使失败也不会挂掉,只是返回false。


移除: remove()  /  poll()
都是移除队列的第一个元素,区别在于当队列为空时,remove()抛出异常,而poll()返回一个空,所以这里我们得注意了,如果移除元素用的是poll()函数,那么千万的不要往队列里面插入null,否则你无法判断返回的null是不是队列为空还是获取的值为nul。


Examine:element()  /  peek()

这两个函数都是获取队列的第一个元素,但是不会移除元素,同样的当队列为空时element()抛出异常,而peek()返回一个null。


这里感谢老司机张拭心得文章:

http://blog.csdn.net/u011240877/article/details/52860924