記事ソース: インターネット 著者: PaleSting/CSDN
この記事では、Java のデータ型について説明しますが、抽象データ型 (ADT) の概念を紹介します。また、Java Collections Framework を紹介することで、Java によって定義された ADT のいくつかについても学習します。
ADT
ADT は、ADT が保持するデータ型と、このデータ型に対して実行できる操作によってのみ定義されます。開発者は、ADT の操作メソッドを通じてのみ ADT のプロパティにアクセスでき、このデータ型内のさまざまな操作がどのように実装されるかはわかりません。
Java では、インターフェイスを使用して一連の操作を提供することがよくありますが、これらの操作の実装の詳細は明らかにされません。インターフェイスはメソッドのセットを定義しており、Java クラスはその必須条件を満たすか、インターフェイスのインスタンスを実装するために、このセットを実装する必要があることに注意してください。
線形テーブル、スタック、キュー
ADT について話すとき、線形リスト、スタック、キューについて話すことがよくあります。これらのデータ構造の詳細については説明しませんが、これらが ADT と呼ばれる理由については説明します。
線形リストは、線形に配置された有限要素のコレクションであり、その要素への直接アクセスを提供します。スタックは、後入れ先出し (LIFO) 順序の線形リストであり、要素はスタックの先頭に追加され、先頭から削除されます。キューは先入れ先出しの順序付けされた線形リストであり、要素はキューの最後から追加され、キューの先頭から取得されます。
線形リスト、スタック、キューの内部構造はさまざまな方法で実装できます。たとえば、順序付き配列またはリンク リストを使用して各構造を実装できます。重要な点は、内部構造をどのように実装しても、外部インターフェイスは常に同じままであるということです。これにより、パブリック インターフェイスを変更せずに、基になる実装を変更またはアップグレードできます。
Java コレクション アーキテクチャ
Java 2 ソフトウェア開発キット (SDK) は、最も一般的に使用される ADT をサポートする新しいクラスを提供します。これらのクラスは Java コレクション クラス (MFC のコレクション クラスと同様) と呼ばれ、連携して Java コレクション アーキテクチャを形成します。このコレクション アーキテクチャは、データをいわゆるコレクション抽象データとして表すインターフェイスとクラスのセットを提供します。
java.util.Collection インターフェースは、オブジェクトのグループ、つまり要素を表すために使用されます。このインターフェイスは、追加、削除、クエリなどの基本的な操作を提供します。 Collection インターフェイスにはイテレータ メソッドも提供されます。 iterator メソッドは、java.util.Iterator インターフェースのインスタンスを返します。 Iterator インターフェイスには、hasNext、next、remove メソッドが用意されています。 Iterator インターフェースによって提供されるメソッドを使用すると、Collection オブジェクト内のインスタンスを最初から最後までループし、イテレーター (カーソル) によって表される要素を安全に削除できます。
java.util.AbstractCollection は、すべてのコレクション アーキテクチャ クラスの基礎です。 AbstractCollection クラスは、イテレータ メソッドとサイズ メソッドを除く、java.util.Collection インターフェイスのすべてのメソッドの実装を提供します。これら 2 つの例外メソッドは、java.util.AbstractCollection を継承するすべてのサブクラスによって実装されます。
インターフェイスを実装するクラスは、すべてのインターフェイス メソッドの実装を提供する必要があります。コレクション アーキテクチャの一部のインターフェイス メソッドはオプションであるため、特定のメソッドが実装されていないことを呼び出し元に通知する方法が必要です。オプションのメソッドが実装されており、このメソッドが実装されていない場合は、UnsupportedOperationException がスローされます。 UnsupportedOperationException クラスは RuntimeException クラスを継承します。これにより、呼び出し元は、各呼び出しを try-catch ペアに入れることなく、すべてのコレクション操作を呼び出すことができます。
リスト線形テーブル
List インターフェイスは Collection インターフェイスを継承し、同一の要素が存在できるように順序付けられたコレクションを定義します。 List インターフェイスには、数値インデックス値を使用して、線形リスト内の要素の位置に基づいてコレクション内の要素を操作するメソッドも追加されます。これらの操作には、追加、取得、設定、削除が含まれます。
List インターフェイスには、listIterator メソッドも提供されます。このメソッドは java.util.ListIterator インターフェースのインスタンスを返します。これにより、線形リストを最初から最後まで、または最後から最後までたどることができます。 java.util.ListIterator は java.util.Iterator インターフェースを継承します。したがって、それが表すコレクション内の要素の追加と変更をサポートします。
次の例は、リストの要素を後ろから前にたどる方法を示しています。これを実現するには、トラバーサルを開始する前に、ListIterator をリストの最後の要素の後に配置する必要があります。
ListIterator iter = aList.listIterator(aList.size());
while (iter.hasPrevious())
System.out.println(iter.previous().toString());
}
コレクション アーキテクチャは、List インターフェイスの 2 つの実装、LinkedList (リンク リスト) と ArrayList (配列リスト、つまり静的リスト) を提供します。どちらの実装も、要素へのランダム アクセスをサポートしています。 ArrayList インスタンスは、配列スタイルの操作と配列のサイズ変更操作をサポートします。 LinkedList のインスタンスは、リストの先頭と末尾の要素の追加、削除、提供を明示的にサポートします。これらの新しいメソッドを使用すると、プログラマは次のように単純に LinedList をスタックまたはキューとして使用できます。
LinkedList aQueue = 新しい LinkedList(aCollection);
aQueue.addFirst(newElement);
オブジェクト anElement = aQueue.removeLast();
LinkedList aStack = 新しい LinkedList(aCollection);
aStack.addFirst(newElement);
オブジェクト anElement= aStack.removeFirst();
表 A のコード スニペットは、java.util.ArrayList および java.util.LinkedList を使用した java.util.List インターフェースの実装インスタンスに対するいくつかの一般的な操作を示しています。これらの操作には、要素の追加、要素へのランダムなアクセス、リストの末尾からの要素の明示的な削除が含まれます。
何が起こっているのかを知っていても、その理由が分からないことは非常に有益です
ADT は、オブジェクトのパブリック インターフェイスでの操作をその具体的な実装から分離するための強力なツールを提供します。これにより、パブリック インターフェイスを変更せずに、ADT 実装を変更および進化させることができます。 Java コレクション アーキテクチャは、基本要素のコレクションを表す多数のインターフェイスと実装を提供し、有用な ADT の作成に使用できます。