队列,双端队列和栈

java.util.Queue
  • Queue接口继承自Collection
  • 队列可以保存一组元素,但是存取元素必须遵循先进先出
    我们一般存取元素,用Collection,解决像排队这样的特殊需求才用队列。
    ArrayList没有实现Queue接口
    LinkedList继承Deque,双端队列继承Queue

1.队列

1.1 入队—offer()

队列是先进先出的规则,队首添加元素,队尾删除元素(出队)

		Queue<String> queue = new LinkedList<>();
		queue.offer("one");
		queue.offer("two");
		queue.offer("three");
		queue.offer("four");
		queue.offer("five");
		System.out.println(queue);//[one, two, three, four, five]
		//出队操作,获取队首元素并将其从队列中移除
		/*
		 * 迭代器
		 * 遍历队列,遍历后元素还在队列中
		 */
		for(String s:queue){
			System.out.println(s);
		}
		
		while(queue.size()>0){
			System.out.println(queue.poll());
		}
		System.out.println("poll遍历后的queue"+queue);//空了

1.2 出队—poll()

		String one = queue.poll();//出队
		System.out.println(one);//one
		System.out.println(queue);//[ two, three, four, five]
		//引用队首元素,不会将其从队列中移除
		one = queue.peek();
		System.out.println(one);//two
		System.out.println(queue);//[ two, three, four, five]

peek()方法时每次输出的都是队首元素,并不会对队列本身产生影响(不会删除或添加元素的)

1.3 遍历队列

两种方法:一种迭代器,一种是传统方法(要注意队列长度会随时变化的)

		for(String s:queue){
			System.out.println(s);
		}
		/*
		*two
		*three
		*four
		*five
		*/
		while(queue.size()>0){
			System.out.println(queue.poll());
		}
		System.out.println("poll遍历后的queue"+queue);//[ ]

2.双队列

java.util.Deque 双端队列

  • Deque接口继承自Queue接口,双端队列是队列两端都可以做进出对操作的队列
  • 常用实现类:java.util.LinkedList
  • pollFirst-offreLast
  • offerFirst-pollLast

2.1 入队—offer()或offFirst()或offLast()

		Deque<String> deque = new LinkedList<>();
		deque.offer("one");
		deque.offer("two");
		deque.offer("three");
		System.out.println(deque);//[one, two, three]
		//offerFirst是在队首入队
		deque.offerFirst("four");
		System.out.println(deque);//[four, one, two, three]
		deque.offerLast("five");
		System.out.println(deque);//[four, one, two, three,five]

2.2 出队—poll()或pollFirst()或pollLast()

		deque.pollFirst();//队首出队
		deque.pollLast();//队尾出队
		System.out.println(deque);//[one, two, three]
		System.out.println(deque.poll());//one

poll()默认在队首出队

3.栈

  • push=offerFirst
  • pop=pollFirst
  • 栈结构:栈可以保存一组元素,但是存取元素必须遵循:先进后出
  • 通常使用栈可以完成“后退”这样的功能

3.1 进栈—push()

		Deque<String> stack = new LinkedList<>();
		stack.push("one");
		stack.push("two");
		stack.push("three");
		stack.push("four");
		stack.push("five");
		System.out.println(stack);//进栈[five, four, three, two, one]

3.2 出栈—pop()

		String str = stack.pop();
		System.out.println(str);//five
		System.out.println(stack);//[four, three, two, one]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值