java Stack(栈)类、Queue和Deque队列

1. java Stack类
特性是:LIFO(后进先出)先进后出,最先进入的在栈底。
Stack底层也是通过数组实现的,同时也是线程安全的

Stack stack=new Stack();
//添加 (插入数据到栈顶)
stack.push(10L);
//判罚是否为空
stack.empty();
System.out.println(stack.empty());
//获取栈顶元素
Object peek = stack.peek();
System.out.println(peek);
//删除(出栈)
Object pop = stack.pop();
System.out.println(pop);
//获取元素的位置
int search = stack.search(10L);
System.out.println(search);//从1开始
System.out.println(stack);

2.Queue单向队列
特性是:FIFO(先进先出) ,最先进入的在队首。插入到队尾

//LinkedList实现了Queue接口 可以使用LinkedList 
Queue queue=new LinkedList();
//Queue还有个直接子类PriorityQueue 自带扩容机制、无边界
Queue priorityQueu=new PriorityQueue();
//插入到队列末尾
priorityQueu.offer(10L);
priorityQueu.offer(40L);
System.out.println(priorityQueu);
//查看队首 不删除
Object peek = priorityQueu.peek();
System.out.println(peek);
//抛出 删除队首
Object poll = priorityQueu.poll();
System.out.println(poll);

3. Deque双向队列
ArrayDeque是无初始容量的双端队列,作为队列使用 ArrayDeque作为队列时的效率比LinkedList要高。
LinkedList则是双向链表。作为栈使用

//用作栈来使用
Deque stack=new LinkedList();
stack.addFirst(12);//添加元素
System.out.println(stack.peekFirst());//获取栈顶元素
System.out.println(stack.pollFirst());//获取并移除栈顶
//队列使用
Deque dequ=new ArrayDeque();
dequ.addLast(12);   //添加元素队尾
System.out.println(dequ.peekFirst());//获取队首
System.out.println(dequ.pollFirst());//获取并移除队首
Queue	Deque
增加	
add	   add、addFirst、addLast
offer  offer、offerFirst、offerLast
移除	
remove	remove、removeFirst、removeLast
poll	pop、poll、pollFirst、pollLast
获取
element	element、getFirst、getLast
peek	peek、peekFirst、peekLast
1、add和offer区别
add() : 添加元素,如果添加成功则返回true,如果队列是满的,则抛出异常
offer() : 添加元素,如果添加成功则返回true,如果队列是满的,则返回false
2、remove和poll
remove() : 移除队列头的元素并且返回,如果队列为空则抛出异常
poll() : 移除队列头的元素并且返回,如果队列为空则返回null
Deque新增了一个pop方法,也是移除队列头的元素并且返回,如果队列为空则抛出异常。
3、element和peek
element() :返回队列头元素但不移除,如果队列为空,则抛出异常
peek() :返回队列头元素但不移除,如果队列为空,则返回null
因此,增加推荐使用add,移除推荐使用poll,获取元素推荐使用peek。

区别:
Queue是单向队列,Deque 是double ended queue的缩写是双向队列。
Queue只能作为队列 , Deque可以作为栈也可以作为队列使用;
Queue以及Deque都是继承于Collection,Deque是Queue的子接口。

stack、Queue、Deque 作为Collection,可以使用集合的常用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值