ホームページ  >  記事  >  Java  >  Java で一般的に使用されるいくつかのデータ構造を要約して共有する

Java で一般的に使用されるいくつかのデータ構造を要約して共有する

巴扎黑
巴扎黑オリジナル
2017-08-01 10:54:561826ブラウズ

JAVA で一般的に使用されるデータ構造 (java.util.)

Java では一般的に使用されるデータ構造がいくつかあり、それらは主にコレクションとマップの 2 つの主要なインターフェイスに分かれています (インターフェイスはメソッドを提供するだけであり、インターフェイスは提供しません)実装を提供します)、プログラムで最終的に使用されるデータ構造は、これらのインターフェイスから継承されたデータ構造クラスです。主な関係 (継承関係) は次のとおりです: (----詳細については Java API ドキュメントを参照してください。)

コレクション---->コレクションマップ----->並べ替えられたマップ-----> ;ツリーマップ

コレクション---->リスト----->(ベクトルArryList LinkedList)コレクション---->セット--- ---->(HashSet LinkedHashSet SortedSet)

----------------コレクション----------------

1. コレクション

API ----このクラスは、コレクションを操作する、またはコレクションを返す静的メソッドのみで構成され、コレクションを操作する多態性アルゴリズム、指定されたコレクションを基にした新しいコレクションを返す「ラッパー」、およびその他のいくつかのアルゴリズムが含まれています。

このクラスのメソッドは、提供されたコレクションまたはクラス オブジェクトが null の場合、すべて

NullPointerException

をスローします

2、List API----このクラスは、動作する静的メソッドのみで構成されます。コレクションを操作する多態性アルゴリズム、指定されたコレクションに基づいて新しいコレクションを返す「ラッパー」、およびその他のいくつかのオッズが含まれています。

このクラスのメソッドは、提供されたコレクションまたはクラス オブジェクトが null の場合、すべて

NullPointerException

をスローします。

List は順序付けられた Collection であり、このインターフェイスを使用すると、各要素の Location の挿入を正確に制御できます。ユーザーはインデックス (配列の添字と同様、リスト内の要素の位置) を使用してリスト内の要素にアクセスできます。これは Java 配列と同様です。


3、Vector

API----

は、後で項目の追加や削除に対応するために、必要に応じて拡大または縮小できます。

Vector class implements a growable array of objects. Like an array, it contains components that can be accessed using an integer index. However, the size of aVectorVectorList は配列 (Array) に基づいて実際にカプセル化されているため、配列の制限を回避するのは難しく、パフォーマンスも低下します。配列を超えては不可能です。したがって、可能であれば、配列をもっと使用する必要があります。もう 1 つの非常に重要な点は、Vector がスレッド同期 (同期) されているということです。これが、Vector と ArrayList の理由です。 重要な違いです。


4、ArrayList

API----Listインターフェースを実装するサイズ変更可能な配列の実装。このクラスは操作するメソッドを提供します。 リストを格納するために内部的に使用される配列のサイズ (このクラスは、同期されていないことを除けば、

Vector

とほぼ同等です)

Vectorと同じ、配列をベースにしたリンクリストですが、ArrayListが同期していない点が異なります。そのため、パフォーマンスの点では Vector よりも優れていますが、マルチスレッド環境で実行する場合は、スレッドの同期を自分で管理する必要があります。

5、LinkedList

API---Listインターフェースを実装するためのLinkedListクラスは、に統一された名前のメソッドを提供します。リストの先頭と末尾にある要素を getremoveinsert することで、リンクされたリストをスタック、キュー、またはスタックとして使用できます。

LinkedList は、前の 2 つのリストとは異なり、配列に基づいていないため、配列のパフォーマンスによって制限されません。

各ノード (Node) には、次の 2 つの側面のコンテンツが含まれます。
1. ノード自体のデータ (data)。2. 次のノード (nextNode)。
そのため、LinkedList にアクションを追加したり削除したりするときに、配列ベースの ArrayList のように大量のデータを移動する必要はありません。これは、nextNode の関連情報を変更するだけで実現できます。これが LinkedList の利点です。


リストの概要:

すべてのリストは、キーと値のペアではなく、異なるタイプの単一のオブジェクトで構成されるテーブルのみを収容できます。例: [tom,1,c]

  • すべてのリストには同じ要素を含めることができます。たとえば、ベクトルには [tom,koo,too,koo]

  • all を含めることができます。リストには [tom,null,1] などの null 要素が含まれる場合があります

  • 配列ベースのリスト (Vector、ArrayList) はクエリに適しており、LinkedList は追加および削除操作に適しています

6. Set(Interface) API-----より正式には、セットには要素のペアは含まれず、その名前が示すように、最大​​ 1 つの null 要素が含まれます。このインターフェースは、数学的 set 抽象化をモデル化しています

Set は、繰り返しの要素を含まないコレクションです

7、HashSet

API-----このクラスは、ハッシュ テーブル (実際には HashMap インスタンス) をサポートするSet インターフェイスを実装します。反復へ 特に、セットの順序が時間の経過とともに一定になることは保証されません。このクラスは 要素を許可しますが、その実装は Collection インターフェイスです。はかなり異なります。リストは基本的に配列に基づいています。ただし、Set は HashMap に基づいて実装されます。これが Set と List の根本的な違いです。 HashSet の格納方法は、HashMap の Key を Set の対応する格納項目として使用します。見てください HashSet の add(Object obj) メソッドの実装が一目でわかります。


8、LinkedHashSet

API----List

インターフェースのリンクリスト実装。すべての要素(

nullを含む)を許可します。 List インターフェース、LinkedList クラスは、リストの先頭と末尾に要素をgetremoveinsertするための均一な名前のメソッドを提供します。これらの操作により、リンクされたリストをスタック、キューとして使用できます。 、 または両端のキュー。 HashSet のサブクラス、リンクされたリスト。


9、SortedSet

API---要素の

合計順序付け

をさらに提供する。 要素は、自然な順序付けを使用するか、通常ソートされたセットの作成時に提供される によって順序付けされます。セットのイテレーターは走査されます。 要素の昇順でのセット。順序付けを利用するためにいくつかの追加操作が提供されます (このインターフェイスは Set のセットに似ています)。ComparatorSortedMap Ordered Set は SortedMap を通じて実装されます。

Setの概要:

(1)

Setの実装の基本はMap(HashMap) (2)

add(Object)を使用するとSet要素を繰り返すことができません。 obj) メソッドで既存のオブジェクトを追加すると、前のオブジェクトが上書きされます

---------------Map-----

Map は、キーオブジェクトと値オブジェクトを関連付けるコンテナーです。 Map などにすることもできるため、マルチレベルのマッピングが形成されます。 Set などのキー オブジェクトの場合、Map コンテナ内のキー オブジェクトを繰り返すことはできません。これは、同じキー オブジェクトが 2 つある場合に値を取得するためです。そのキー オブジェクトに対応するオブジェクトを取得すると、問題が発生する可能性があります。そのため、キーの一意性は非常に重要であり、キー オブジェクトの性質と一致しています。セット。もちろん、使用中に、特定のキーに対応する値オブジェクトが変更される可能性があります。この場合、最後に変更された値オブジェクトがそのキーに対応します。値オブジェクトには一意性の要件はありません。問題なく任意の数のキーを値オブジェクトにマッピングできます (ただし、使用に不便が生じる可能性があります。何が取得されているかはわかりません。それに対応する値オブジェクトです)。鍵)。

1、HashMap

API----ハッシュテーブルベースのMapインターフェースの実装は、すべてのオプションのマップ操作を提供し、nullを許可します。 値と null キー (HashMap クラスは、非同期で null を許可する点を除いて、ほぼ Hashtable と同等です。) このクラスは、特にマップの順序については保証しません。それを保証するものではありません 順序は時間の経過とともに一定になります。

2、TreeMap

API ---- 赤と黒のツリーベースのNavigableMap 実装。 使用されるコンストラクターに応じて、キーの自然な順序に従うか、マップ作成時に提供されるComparatorによってキーが順序どおりに格納されるため、firstKey( ) などのいくつかの拡張メソッドがあります。 lastKey() など。TreeMap から範囲を指定してそのサブマップを取得することもできます。

キーと値の関連付けは、put(Object key, Object value) メソッドを使用して、キーを値オブジェクトに関連付けます。 get(Object key) を使用して、このキー オブジェクトに対応する値オブジェクトを取得します。


----------説明----------

1. よく使用されるいくつかのカテゴリの違い
1.配列リスト: 単一要素、高効率、主にクエリ
2 に使用されます。ベクター: 単一要素、スレッドセーフ、主にクエリに使用されます
3. LinkedList: 単一の要素。主に挿入と削除に使用されます
4。ハッシュマップ: 要素はペアであり、要素は空にすることもできます
5.ハッシュ表: 要素はペアになっており、スレッドセーフであり、要素を null にすることはできません
2. Vector、ArrayList、LinkedList
パフォーマンスAr rayList が最も優れていますが、コレクション内の要素を頻繁に挿入および削除する必要がある場合は、LinkedList のパフォーマンスが向上しますが、これら 3 つのパフォーマンスは配列ほど良くありません。また、Vector はスレッド同期されます。したがって:
配列を使用できる場合 (要素の型が固定され、配列の長さが固定されます)、マルチスレッドの問題を考慮して、ArrayList を優先してください。 マルチスレッド条件で使用する場合は、Vector を検討してください。
頻繁に削除と挿入が必要な場合は、LinkedList が便利です。私も知りませんが、ArrayList を使用することに何も問題はありません。

3、コレクションと配列

Java コレクション クラス フレームワークには、コレクション (コレクションではないことに注意してください!) と配列と呼ばれる 2 つのクラスがあります。これらは JCF の強力なツールですが、初心者は無視することがよくあります。 JCF ドキュメントによると、これら 2 つのクラスは、ラッパー実装 (Wrapper Implementations)、データ構造アルゴリズム、および配列関連のアプリケーションを提供します。
上記の「半分検索」や「並べ替え」などの古典的なアルゴリズムを忘れることはないと思います。Collections クラスには、データ構造クラスでこれらの煩わしいタスクを簡単に実行できるようにするための静的メソッドが豊富に用意されています。 . :
binarySearch: 半分の検索。
sort: 並べ替え、これはクイック並べ替えに似た方法ですが、効率は依然として O(n * log n) ですが、安定した並べ替え方法です。
reverse: 線形テーブルを逆の順序で操作します。これは、過去のデータ構造に関する古典的なテスト問題です。
rotate: 特定の要素を軸として線形テーブルを「回転」します。
swap: 線形リスト内の 2 つの要素の位置を交換します。
...
コレクションのもう 1 つの重要な機能は、次のようなコレクションを特別なコレクションに変換するいくつかのメソッドを提供する「ラッパー」です。 unmodifiableXXX: 読み取り専用コレクションに変換します。XXX は、Collection、List、Map、Set、SortedMap、SortedSet の 6 つの基本的なコレクション インターフェイスを表します。読み取り専用コレクションを挿入または削除すると、UnsupportedOperationException がスローされます。
synchronizedXXX: 同期コレクションに変換します。
singleton: 要素を 1 つだけ含むセットを作成します。ここで、singleton は単一要素の Set を生成します。

singletonList と singletonMap は、それぞれ単一要素の List と Map を生成します。
空セット: コレクションの静的プロパティ EMPTY_SET、EMPTY_LIST、および EMPTY_MAP によって表されます。

以上がJava で一般的に使用されるいくつかのデータ構造を要約して共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。