Java中栈、链表、队列的接口实现与选择

简介: Deque接口既可以用作先进后出的栈,也可以用作先进先出的队列。

Deque

Deque接口既可以用作先进后出的栈,也可以用作先进先出的队列。


Java Doc里建议用Deque替代Stack接口完成栈的功能,所以我们不再使用Stack类实现,

在JavaDoc for Deque中它这样说:

双端队列也可以用作LIFO(后进先出)堆栈。此接口应优先于旧版Stack类使用。当双端队列用作堆栈时,元素从双端队列的开头被压入并弹出。


ArrayDeque

实现:通过Deque接口实现


Deque<Integer> stack = new ArrayDeque<>();


常用方法:


入栈:

push()

出栈:

pop()

返回栈顶:

peek()

返回栈的大小

size()

判断栈空:

isEmpty()

队列【双端队列】

ArrayDeque

实现:和栈相同,虽然方法一样,比如push()和add()虽然都是添加元素,但效果截然不同,一个是添加到栈顶,一个是添加到队尾。注意自己要使用的数据结构需要的操作方法。


Deque<Integer> queue = new ArrayDeque<>();


常用方法:


插入:

addfirst和offerFirst在队头插入元素,addLast和offerLast在队尾插入元素。 如果队列的大小是限定的, 推荐优先使用offerFirst和offerLast, 因为addfirst和addLast会在队列满的时候抛出异常。


删除:

removeFirst和pollFirst 从队头移除元素,removeLast和pollLast从队尾移除元素。如果队列是空,pollFirst和pollLast 会返回空, 但是removeFirst和removeLast会抛出异常。


获取:

getFirst 和 peekFirst 方法获取队列的第一个元素。这些方法不会移除队列中的元素。相应的getLast 和peekLast获取队列中最后一个元素。当队列是空的时候, peekFirst和peekLast返回空,但是getFirst 和 getLast会抛出异常。


返回栈的大小

size()


判断队列空:

isEmpty()


链表

ArrayList 适合需要大量查改的操作

LinkedList 适合需要大量增删的操作

实现:

List<Integer> list = new ArrayList<>();

List<Integer> list2 = new LinkedList<>();


常用方法:


add() 添加元素


set() 修改方法


size() 方法


addAll(Collection<> c) 将另一个Collection集合的元素全部添加进来


remove(int index) 删除下标为index 的元素


indexOf(Object o) 返回元素 o 的下标

目录
打赏
0
0
0
0
37
分享
相关文章
|
1月前
|
java设置栈内存大小
在Java应用中合理设置栈内存大小是确保程序稳定性和性能的重要措施。通过JVM参数 `-Xss`,可以灵活调整栈内存大小,以适应不同的应用场景。本文介绍了设置栈内存大小的方法、应用场景和注意事项,希望能帮助开发者更好地管理Java应用的内存资源。
39 4
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
155 12
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
169 64
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
111 5
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
117 5
|
4月前
|
🧠Java零基础 - Java栈(Stack)详解
【10月更文挑战第17天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
141 2
java数据结构,双向链表的实现
文章介绍了双向链表的实现,包括数据结构定义、插入和删除操作的代码实现,以及双向链表的其他操作方法,并提供了完整的Java代码实现。
java数据结构,双向链表的实现
|
4月前
|
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
86 0
|
5月前
|
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
44 3
|
5月前
|
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
54 2
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等