検索
ホームページJava&#&チュートリアルJava で一般的に使用されるいくつかのデータ構造を要約して共有する

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 までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。