您好,欢迎来到爱够旅游网。
搜索
您的当前位置:首页java数据结构 Queue(LinkedList)类总结

java数据结构 Queue(LinkedList)类总结

来源:爱够旅游网

队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

以下实例演示了队列(Queue)的用法:

然后根据以上的api写一个demo:

public class QueueDemo {

    public static void main(String[] args) {
        Queue<String> queue = new LinkedList<>();

        queue.offer("1");
        queue.offer("2");
        queue.offer("3");
        queue.offer("4");
        queue.offer("5");

        //输出元素
        System.out.println(queue);
        System.out.println(queue.getClass());
        //在这里我们可以看出,我们会去默认使用linkedList的方法
        //但是如果一定要使用queue的方法,也会自动转型

        //返回第一个元素,但是如果队列是空的会报错
        System.out.println("第一个元素是" + queue.element());

        //返回第一个元素,并且将这个元素删除
        System.out.println("第一个元素是" + queue.poll()+",并且它已经被删除了");
        
        //返回第一个元素,但是如果队列是空的会输出null
        System.out.println("第一个元素变成了" + queue.peek());
        
    }

}

但是,我们同时也要清楚,对于queue,最重要的还是先进先出,所以我们再写一个简单的先进先出的demo:

		Queue<Integer> q = new LinkedList<>();

        int i = 10;
        while(i-->0){
            q.offer(i);
            if (q.size()>3){
                ((LinkedList<Integer>) q).removeFirst();
            }
            System.out.println(q);
        }
        /**
         * [9]
         * [9, 8]
         * [9, 8, 7]
         * [8, 7, 6]
         * [7, 6, 5]
         * [6, 5, 4]
         * [5, 4, 3]
         * [4, 3, 2]
         * [3, 2, 1]
         * [2, 1, 0]
         */	

然后再介绍一个LinkedList很好用的过滤器API,removeIf,这个api呢,我通过一个lambda表达式,将包含3的都去除掉,也可以看输出来思考一下,这个过滤器的内部实现原理。

        Queue<Integer> q = new LinkedList<>();

        int i = 10;
        while(i-->0){
            q.offer(i);
            q.removeIf(s -> q.contains(3));
            if (q.size()>3){
                ((LinkedList<Integer>) q).removeFirst();
            }
            System.out.println(q);
        }
        /**
         * [9]
         * [9, 8]
         * [9, 8, 7]
         * [8, 7, 6]
         * [7, 6, 5]
         * [6, 5, 4]
         * []
         * [2]
         * [2, 1]
         * [2, 1, 0]
         */

而至于像java.util.concurrent包下的几个多线程下的几个Queue的使用方法,可以参考我写的这篇文章,毕竟队列阻塞的这个性质本身就适合使用在多线程环境下,所以还是有必要多学学的,包括更加高级的disruptor无锁多线程框架,也是参考的BlockingQueue去进行设计的,就可以看出其重要性了吧。

传送门:

参考

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igbc.cn 版权所有 湘ICP备2023023988号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务