LinkedList(链表)模仿先进先出或者先进后出

本文介绍了如何使用LinkedList在Java中实现先进先出(FIFO)或先进后出(LIFO)策略。通过addFirst, addLast, removeFirst和removeLast方法的组合,可以灵活地设计存储和取出元素的顺序。例如,!First与*Frist结合使存取顺序相反,而!Last与*Last结合也有类似效果。" 51674037,5223081,PHP接收Android JSON数据存库并返回JSON响应,"['PHP', 'Android开发', '数据库操作', 'MySQL', 'Linux']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 前注:本文参考传智博客毕向东老师的java教学视屏加上本菜鸟的一些总结理解,错漏之处烦请各位批评改正,望共同进步。
一 所用主要方法介绍
1.removedFirst(移除对象)
  removedLast
2.addFirst(添加对象)
  addLast
3.isEmpty(判断元素是否为空)

二 代码展示(以下代码是毕向东老师)
LinkedList list = new LinkList();//获取LinkdeList对象
//添加对象
List.addFirst("abc1");
List.addFirst("abc2");
List.addFirst("abc3");
List.addFirst("abc4");
//判断元素是否为空,不为空就取出对象。
while(!list.isEmpty){
System.out.println(List.removedFirst()))
}
结果:



abc4
abc3
abc2
abc1

三 体会:可以代替Iterator。可以用addFirst , addLast , removeFirst , removeLast重新组合。

!代表add ,*代表remove

用!First和*Frist组合那么存入和取出顺序相反

用!Last和*Last组合那么存入和取出顺序相反

用!First和*Last。。。。。。。(自己实验)

四 end
java_haha努力更新中。。。下篇再见。
<think>好的,我现在需要帮助用户理解Java中栈和队列的概念及实现。用户已经提供了一些参考资料,我需要仔细梳理这些信息,并按照用户的要求组织回答。 首先,用户提到系统级指令,要求使用中文回答,生成相关问题,并正确应用引用标识。同时,回答需要结构清晰,分步解释。用户给出的示例中,快速排序部分有代码示例和相关问题,我需要模仿这种结构。 接下来,我需要分析用户提供的引用内容。引用[1]和[3]提到了栈和队列的不同实现方式,比如链式队列、顺序栈,以及用数组或链表实现栈。引用[2]和[5]展示了如何用栈实现队列,以及栈的基本方法如push、pop、peek。引用[4]则比较了队列的方法,如element()和peek()的区别。 我需要将这些信息整合成栈和队列的概念、实现方式、使用方法,以及常见问题。首先,栈是后进先出(LIFO)结构,队列是先进先出(FIFO)。Java中的实现可以通过集合框架中的类,如LinkedList、ArrayDeque,或者自己用数组/链表实现。 然后,需要分别说明栈和队列的标准库用法,比如使用Deque接口作为栈和队列,以及各自的方法。比如栈的push、pop、peek,队列的offer、poll、peek等。还要注意异常处理,比如pop在空栈时会抛出异常,而poll返回null。 接下来是代码示例,用户提供的引用中有几个例子,比如用两个栈实现队列,或者用数组实现栈。需要选择合适的代码片段,确保语法正确,并符合用户的要求。比如引用[2]中的MyQueue类,使用两个栈来模拟队列,这可能是一个好的例子。 然后,用户要求生成相关问题,我需要根据内容提出三个相关问题,可能涉及性能比较、实现方式的选择、异常处理等。 同时,要注意引用标识的正确添加,每个引用来源在回答中的适当位置标注,比如在提到栈的数组实现时引用[3],在讨论队列方法时引用[4]。 还需要检查LaTeX格式是否正确,确保数学表达式用$...$包裹,独立公式用$$...$$,但根据问题内容,可能数学公式较少,主要关注代码和文本结构。 最后,确保回答结构清晰,分点讲解,帮助用户逐步理解栈和队列的实现与用法,并附上相关问题以供进一步学习。</think>### Java中栈和队列的实现与用法详解 #### 一、基本概念 1. **栈(Stack)** 遵循**后进先出(LIFO)**原则,核心操作包括入栈(`push`)、出栈(`pop`)和查看栈顶元素(`peek`)。Java中可通过`Deque`接口模拟栈[^5]。 2. **队列(Queue)** 遵循**先进先出(FIFO)**原则,核心操作包括入队(`offer`)、出队(`poll`)和查看队首元素(`peek`)。`Deque`接口支持双端队列操作[^1]。 --- #### 二、标准库实现方式 ##### 1. 栈的实现 - **链式栈**:通过`LinkedList`实现 ```java Deque<Integer> stack = new LinkedList<>(); stack.push(1); // 入栈 stack.pop(); // 出栈 ``` - **顺序栈**:通过`ArrayDeque`实现(推荐)[^3] ```java Deque<Integer> stack = new ArrayDeque<>(); ``` ##### 2. 队列的实现 - **链式队列**:使用`LinkedList` ```java Queue<Integer> queue = new LinkedList<>(); queue.offer(1); // 入队 queue.poll(); // 出队 ``` - **顺序队列**:使用`ArrayDeque`(线程不安全但高效)[^1] ```java Deque<Integer> queue = new ArrayDeque<>(); ``` --- #### 三、核心方法对比 | **操作** | **栈方法** | **队列方法** | 说明 | |----------|--------------------|---------------------------|-----------------------------------------| | 添加元素 | `push(e)` | `offer(e)` | 栈顶/队尾插入元素 | | 移除元素 | `pop()` | `poll()` | 栈顶/队首移除元素(空时`pop`抛异常,`poll`返回`null`)[^4] | | 查看元素 | `peek()` | `peek()` | 查看栈顶/队首元素(空时返回`null`) | --- #### 四、相互实现案例 ##### 1. 用栈实现队列(满足FIFO) ```java class MyQueue { private Stack<Integer> A = new Stack<>(); private Stack<Integer> B = new Stack<>(); public void push(int x) { while (!B.isEmpty()) A.push(B.pop()); A.push(x); while (!A.isEmpty()) B.push(A.pop()); // 通过双栈反转顺序[^2] } public int pop() { return B.pop(); } } ``` ##### 2. 用队列实现栈(满足LIFO) ```java class MyStack { Queue<Integer> queue = new LinkedList<>(); public void push(int x) { queue.offer(x); for (int i = 1; i < queue.size(); i++) { queue.offer(queue.poll()); // 通过循环移动元素模拟栈 } } public int pop() { return queue.poll(); } } ``` --- #### 五、应用场景 - **栈**:函数调用栈、括号匹配、表达式求值 - **队列**:消息队列、线程池任务调度、广度优先搜索(BFS) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值