zoukankan      html  css  js  c++  java
  • 集合中篇—栈与队列



    1. 准备

    Java的集合实现了栈与队列,我们直接调用就可以实现功能,可是平时就见过Queue、Stack、Deque这些字眼,完全不知道怎么回事,下面就来梳理一下他们的关系,先来看类图(这里简化并只关联了所需要提到的类或接口),下面只说明之前没有提到的内容,没有看过前篇的同学赶紧充电 前篇传送门

    • Stack类(栈),继承了Vector线程安全类,现在不推荐使用,推荐ArrayDeque
    • Queue接口(队列),有Collection方法,而且也新增了自己的方法
    • Deque接口(双向队列),继承了Queue,因为是双向队列,所以可以实现队列和栈的操作
    • 我们之前学过的LinkedList以及ArrayDeque实现Deque接口,即可以作为队列和栈使用


    2. Queue

    Queue接口不同之处在于同一个功能他有两套方法,两套方法区别于一套是实现返回值,另一套是抛出异常

    Throw Exception Return value
    增加 add(e) offer(e)
    删除 remove() poll()
    检查 element() peek()

    后面讲解基于抛出异常的方法



    3. Deque

    double ended queue,意思是双向队列,所以该接口多了操作方法,用于操作头尾,下面讲解部分方法,其余自行查看

    方法 解释
    addFirst(E e) 队头增加元素
    addLast(E e) 队尾增加元素
    removeFirst() 队头删除元素,并返回该元素
    removeLast() 队尾删除元素,并返回该元素
    peekFirst() 返回队头元素,不删除
    peekLast() 返回队尾元素,不删除


    4. LinkedList

    • 之前我们就学过LinkedList了,底层是双向链表,想不到还支持栈和队列,而且有了头尾操作,实现栈和队列就简单了,我们比较熟悉他,所以栈和队列就基于LinkedList来讲解
    • 栈和队列用头尾操作实现稍微想一下就会理解的,后面列出表格对照

    4.1 栈

    先进后出的结构,想象成羽毛球筒就行了,先放进去的羽毛球都是最后才能拿出来的

    具体实现

    public static void main(String[] args) {
    	
     	LinkedList linkedList = new LinkedList(); 
    	
     	linkedList.addFirst(1);
     	linkedList.addFirst(2);
     	linkedList.addFirst(3);
     	linkedList.addFirst(4);
     	
     	linkedList.removeFirst();
     	
     	//一定要用foreach方法,上篇有解释
     	for(Object i : linkedList){
     		System.out.println(i);
     	}
    }
    
    3
    2
    1
    

    4.2 队列

    public static void main(String[] args) {
    	
     	LinkedList linkedList = new LinkedList(); 
    
        linkedList.addLast(1);
        linkedList.addLast(2);
        linkedList.addLast(3);
        linkedList.addLast(4);
    
        linkedList.removeFirst();
    
        //一定要用foreach方法,上篇有解释
        for(Object i : linkedList){
            System.out.println(i);
        }
    }
    
    2
    3
    4
    

    4.3 对照表

    功能 方法
    进栈 addFirst(e)
    出栈 remoceFirst()
    取栈顶 peekFirst()

    队列

    功能 方法
    进队 addLast(e)
    出队 removeFirst()
    取队首 peekFirst()

    Stack的pop、push、peek方法Deque接口都有,但内部使用的还是addFirst,removeFirst
    所以使用Deque的pop方法使用了头插法,遍历顺序是逆序的,建议使用addFirst等可以帮助记忆底层原理



  • 相关阅读:
    Python网络编程 —— 粘包问题及解决方法
    Python网络编程 —— socket(套接字)及通信
    Python网络编程 —— 网络基础知识
    Python
    MySQL 之 数据的导出与导入
    MySQL 之 慢查询优化及慢日志管理
    MySQL 之 索引进阶
    MySQL 之 索引
    MySQL 之 事务
    MySQL 之 表的存储引擎
  • 原文地址:https://www.cnblogs.com/Howlet/p/12196270.html
Copyright © 2011-2022 走看看