Javaの学習:Javaコンテナ--Queue分析とアプリケーションのインターフェイス

Javaコンテナ--Queue(キュー)の分析およびアプリケーションインターフェイス

1、の概念

キュー。キューは、それが共通のデータインタフェースである、Collectionインタフェースを継承しています。キューはインターフェイスです。Dueueキュー・インターフェースを継承しました。LinkedListのは、キューのインターフェイスを実装しています。

キュー:キューウェイ、FIFOの原則に従ってください。
Dueue:一端のみからのDequeエンキューおよびデキューを制限する場合はダブルエンドキュー要素、キューエンキュー(申し出)の両端には、(投票を)デキューすることができ、スタックのデータ構造を実現することができます。スタックの場合、スタックは(プッシュ)を有し、(ポップ)ポップ、先進的な原則の後に従ってください。

図2に示すように、一般的な方法

(1)キュー常法

末尾に要素を追加します

追加():尾、真の成功のリターンに要素を追加する
プランを():最後尾に要素を追加し、このキューに容量制限要素に違反することなく、すぐに指定されている場合。キューの容量を使用することが制限される場合、この方法は、一般的に添加することが好ましい、後者の要素が例外をスローを介して挿入することができません。

取得およびキューの先頭を削除します

)(削除:取得してキューが空の場合、このキューの先頭を削除し、例外がスローさはNoSuchElementExceptionの
投票を():取得およびキューが空の場合、このキューの先頭を削除し、nullが返されます

削除せずに、キューの最初の要素を取得します。

要素は、():要素の最初のチームを取得しますが、キューから削除されません。キューが空の場合、はNoSuchElementExceptionがスローされます
)(PEEKを:要素の最初のチームを取得しますが、キューから削除されません。このキューが空の場合、nullが返されます
ここに画像を挿入説明

(2)Dueue常法

ここに画像を挿入説明

3.アプリケーション

(1)シミュレート銀行預金キュー(FIFO)を使用し

/**
 * 使用队列模拟银行存款业务(先进先出)
 * @author Linlin Zhao
 *
 */
public class QueueDemo01 {
	public static void main(String[] args) {
		Queue <Request> que =new ArrayDeque<Request>();
		//模拟排队情况
		for(int i=0;i<10;i++){
			final int num=i;//匿名内部类,只能访问final对象。
			que.offer(new Request() {
				@Override
				public void deposit() {
					System.out.println("第"+(num+1)+"个人,办理存款业务,存款额度为: "+Math.round(Math.random()*100000));		
				}
			});	
		}
		dealWith(que);
	}
	//处理业务。先进先出。
	public static void dealWith(Queue<Request> queue){
		Request req=null;
		while(null!=(req=queue.poll())){
			req.deposit();
		}
	}
}

interface Request{
	//存款
	void deposit();
	
}

(2)Dueue実装カスタム・スタックを使用して

/**
 * 使用队列实现自定义栈
 * 1、弹栈
 * 2、压栈
 * 3、获取头
 * @author Linlin Zhao
 *
 */
public class MyStack01<E> {

	//容器
	private Deque<E> container =new ArrayDeque<E>();
	//容量
	private int cap;
	
	public MyStack01(int cap) {
		super();
		this.cap = cap;
	}
	
	//压栈
	public boolean push(E e){
		if(container.size()+1>cap){
			return false;
		}
		return container.offerLast(e);//加到队尾
	}
	
	//弹栈
	public E pop(){
		return container.pollLast();//移除队尾
	}
	
	//获取
	public E peek(){
		return container.peekLast();//获取队尾
	}

	public int size(){
		return this.container.size();//队列长度
	}

	public static void main(String[] args) {
		
	}
}

公開された57元の記事 ウォン称賛13 ビュー1121

おすすめ

転載: blog.csdn.net/weixin_42924812/article/details/105152133