1。概要
このチュートリアルでは、Javaでcharスタックを作成する方法について説明します。最初にJavaAPIを使用してこれを行う方法を確認し、次にいくつかのカスタム実装を確認します。
スタックは、LIFO(後入れ先出し)の原則に従うデータ構造です。その一般的な方法のいくつかは次のとおりです。
- push(E item) –アイテムをスタックの一番上にプッシュします
- pop() –スタックの最上位にあるオブジェクトを削除して返します
- peek() –オブジェクトを削除せずにスタックの一番上に返します
2. JavaAPIを使用した文字スタック
Javaには、java.util.Stackという名前の組み込みAPIがあります。以来charがプリミティブデータ型であるジェネリック医薬品に使用することはできません、我々はのラッパークラスを使用する必要がjava.lang.Characterのを作成するために、スタックを:
Stack charStack = new Stack();
これで、Stackでpush、pop、およびpeekメソッドを使用できるようになりました。
一方、スタックのカスタム実装を構築するように求められる場合があります。したがって、いくつかの異なるアプローチを検討します。
3.LinkedListを使用したカスタム実装
LinkedListをバックエンドデータ構造として使用してcharスタックを実装しましょう。
public class CharStack { private LinkedList items; public CharStack() { this.items = new LinkedList(); } }
コンストラクターで初期化されるitems変数を作成しました。
ここで、push、peek、およびpopメソッドの実装を提供する必要があります。
public void push(Character item) { items.push(item); } public Character peek() { return items.getFirst(); } public Character pop() { Iterator iter = items.iterator(); Character item = iter.next(); if (item != null) { iter.remove(); return item; } return null; }
プッシュとPEEK方法は、内蔵の方法を使用しているのLinkedList。以下のためにポップ、我々は最初の使用Iteratorをトップかの項目がありますかどうかをチェックします。そこにある場合は、removeメソッドを呼び出してリストからアイテムを削除します。
4.配列を使用したカスタム実装
データ構造に配列を使用することもできます。
public class CharStackWithArray { private char[] elements; private int size; public CharStackWithArray() { size = 0; elements = new char[4]; } }
上記では、char配列を作成します。これは、コンストラクターで初期容量4で初期化します。さらに、スタックに存在するレコードの数を追跡するためのサイズ変数があります。
それでは、pushメソッドを実装しましょう。
public void push(char item) { ensureCapacity(size + 1); elements[size] = item; size++; } private void ensureCapacity(int newSize) { char newBiggerArray[]; if (elements.length < newSize) { newBiggerArray = new char[elements.length * 2]; System.arraycopy(elements, 0, newBiggerArray, 0, size); elements = newBiggerArray; } }
アイテムをスタックにプッシュするとき、最初に、配列にアイテムを格納する容量があるかどうかを確認する必要があります。そうでない場合は、新しい配列を作成し、そのサイズを2倍にします。次に、古い要素を新しく作成された配列にコピーし、それを要素変数に割り当てます。
注:単にサイズを1つ増やすのではなく、配列のサイズを2倍にする理由の説明については、このStackOverflowの投稿を参照してください。
最後に、peekメソッドとpopメソッドを実装しましょう。
public char peek() { if (size == 0) { throw new EmptyStackException(); } return elements[size - 1]; } public char pop() { if (size == 0) { throw new EmptyStackException(); } return elements[--size]; }
どちらの方法でも、スタックが空でないことを検証した後、我々は位置にある要素を返しますサイズ- 1.ポップ、要素を返すに加えて、我々はデクリメントサイズを1だけ。
5。結論
この記事では、Java APIを使用してcharスタックを作成する方法を学び、いくつかのカスタム実装を見ました。
この記事で紹介するコードは、GitHubから入手できます。