ホームページ Java &#&はじめる Javaのデータ構造とは何ですか?

Javaのデータ構造とは何ですか?

Apr 12, 2021 pm 02:34 PM
java データ構造

Java データ構造には、1. List、2. Vector、3. ArrayList、4. LinkedList、5. Set、6. HashSet、7. LinkedHashSet、8. SortedSet、9. Map、10. HashMap が含まれます。 。

Javaのデータ構造とは何ですか?

#この記事の動作環境: Windows10 システム、Java 1.8、thinkpad t480 コンピューター。

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

Collection---->Collections   
Map----->SortedMap------>TreeMap          Map------>HashMap
Collection---->List----->(Vector \ ArryList \ LinkedList)
Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)
ログイン後にコピー

List (インターフェイス)

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

Vector

配列に基づくリスト (Array) は、実際には、配列にはない使用できるいくつかの関数をカプセル化するため、配列の制限を回避するのは難しく、パフォーマンスも低下します。配列を超えては不可能です。したがって、可能であれば、配列をもっと使用する必要があります。もう 1 つの非常に重要な点は、Vector がスレッド同期 (同期) されることです。これは、Vector と ArrayList の重要な違いでもあります。

ArrayList

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

LinkedList

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

各ノード (Node) には、コンテンツの 2 つの側面が含まれています:

1. ノード自体のデータ;

2. 次のノード (nextNode) の情報。

したがって、LinkedList にアクションを追加したり削除したりするときに、配列ベースの ArrayList のように大量のデータを移動する必要はありません。 nextNodeの関連情報を変更するだけで実現できるのがLinkedListの利点です。

リストの概要

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

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

すべてのリストには There を含めることができます[tom,null,1] などの null 要素です。

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

Set (インターフェイス)

Set は繰り返し要素を含まない Collection です

HashSet

Set と List はどちらも Collection インターフェイスを実装していますが、実装方法はまったく異なります。リストは基本的に配列に基づいています。ただし、Set は HashMap に基づいて実装されており、これが Set と List の根本的な違いです。 HashSet の格納方法は、HashMap の Key を Set の対応する格納項目として使用します。 HashSet の add(Object obj) メソッドの実装を見れば一目瞭然です。

LinkedHashSet

HashSet のサブクラス、リンク リスト。

SortedSet

Ordered Set は SortedMap を通じて実装されます。

Map (インターフェイス)

Map はキー オブジェクトと値オブジェクトを関連付けるコンテナであり、値オブジェクトは Map などになることがあり、複数レベルのマッピングを形成します。 Set などのキー オブジェクトの場合、Map コンテナ内のキー オブジェクトを繰り返すことはできません。これは、検索結果の一貫性を維持するためです。同じキー オブジェクトが 2 つある場合は、値を取得する必要があります。そのキー オブジェクトに対応するオブジェクトです。問題が発生します。おそらく、取得したものは、あなたが考えていた値オブジェクトではなく、その結果、混乱が生じるでしょう。したがって、キーの一意性は非常に重要であり、キーの性質と一致しています。セット。

もちろん、使用中に、特定のキーに対応する値オブジェクトが変更される場合がありますが、この場合、最後に変更された値オブジェクトがそのキーに対応します。値オブジェクトには一意性の要件はありません。値オブジェクトに任意の数のキーを問題なくマッピングできます (ただし、使用に不便が生じる可能性があります。何を取得しているのかわかりません。それに対応する値オブジェクトは鍵)。

(無料ビデオ チュートリアル共有:

java ビデオ チュートリアル)

HashMap

ハッシュ テーブルに基づいた Map インターフェイスの実装。この実装では、すべてのオプションのマッピング操作が提供され、null 値と null キーが許可されます。 (HashMap クラスは、同期されていないことと null を許可することを除いて、Hashtable とほぼ同じです。) このクラスはマップの順序を保証せず、特に順序が不変であることを保証しません。さらに、HashMap はスレッドセーフではありません。つまり、Hashtable はスレッドセーフですが、マルチスレッド環境では問題が発生する可能性があります。

TreeMap

TreeMap はキーを順番に格納します。

HashTable

(1) Hashtable はハッシュ テーブルであり、格納される内容がキー Valueペア(キーと値)のマッピング。

(2) Hashtable は Dictionary を継承し、Map、Cloneable、および java.io.Serializable インターフェイスを実装します。

(3) ハッシュテーブル関数はすべて同期的です。つまり、スレッドセーフです。キーも値も null にすることはできません。

一般的に使用されるいくつかのクラスの違い

1. ArrayList: 単一要素、高効率、主にクエリ

2 に使用されます。ベクター: 単一要素、スレッドセーフ、主にクエリ

3 に使用されます。 LinkedList: 単一要素。主に挿入と削除に使用されます

4。 HashMap: 要素はペアになっており、要素は空の場合もあります (

5)。ハッシュテーブル: 要素はペアであり、スレッドセーフであり、要素を空にすることはできません

Vector、ArrayList、LinkedList

ほとんどの場合、パフォーマンスの点では ArrayList が最高ですが、要素がコレクションに必要な LinkedList は頻繁に挿入と削除を行うとパフォーマンスが向上しますが、これら 3 つのパフォーマンスは配列ほど良くありません。また、Vector はスレッド同期されます。したがって:

配列を使用できる場合 (要素の型と配列の長さが固定)、List の代わりに配列を使用してみてください。

頻繁に削除がない場合は、スレッドの問題については、ArrayList を優先します。

マルチスレッド条件で使用する場合は、Vector を検討できます。

削除と挿入が頻繁に行われる場合は、Vector を検討してください。挿入が必要な場合は、LinkedList が機能します。

何も分からない場合は、ArrayList を使用しても問題ありません。

スタック

スタックは、一方の端でのみ挿入および削除できる特殊な線形リストです。先入れ後出しの原則に従ってデータを保存します。最初に入力されたデータはスタックの一番下にプッシュされ、最後の

データはスタックの一番上に置かれます。読み取られる場合、データはスタックの一番上からポップされます (最後のデータはスタックの一番下にプッシュされます)。1 つが読み取られます)。

Queue

テーブルの前端 (前) での削除操作と、テーブルの後端 (後) での挿入操作のみを許可する特殊な線形テーブル。

挿入操作を実行する端はキューの末尾と呼ばれ、削除操作を実行する端はキューの先頭と呼ばれます。キュー内に要素が存在しない場合、それは空のキューと呼ばれます。

配列

プログラミングでは、処理の便宜上、同じ型の複数の変数が順序付けられた形式で編成されます。同様のデータ要素を順番に並べたものを配列と呼びます。 C 言語では、配列は構築されたデータ型です。配列は複数の配列要素に分解でき、これらの配列要素は基本データ型または構築型になります。したがって、配列要素の種類に応じて、配列は数値配列、文字配列、ポインタ配列、構造体配列などのさまざまなカテゴリに分類できます。

リンク リスト

物理ストレージ ユニット上の非連続かつ非順次のストレージ構造。データ要素の論理的順序は、リンク リスト内のポインタ リンク順序によって実現されます。

リンク リストは一連のノードで構成され (リンク リストの各要素はノードと呼ばれます)、ノードは実行時に動的に生成できます。各ノードは 2 つの部分で構成されます。

1 つはデータ要素を格納するデータ フィールドで、もう 1 つは次のノードのアドレスを格納するポインタ フィールドです。

ツリー

ツリーはn個(n>0)のノードを含む有限集合Kであり、Kには関係Nが定義されています。Nは次の条件を満たします。

(1) ノード k0 は 1 つだけあり、関係 N に対する先行ノードはありません。K0 はツリーのルート ノードと呼ばれます。ルート (ルート)

(2) K0 を除いて、k の各ノードは関係 N の先行ノードを 1 つだけ持ちます。

(3) K の各ノードは、関係 N に対して m 個の後続ノード (m>=0) を持つことができます。

ヒープ

コンピュータ サイエンスでは、ヒープは特別なツリー データ構造であり、各ノードには値があります。通常、ヒープのデータ構造と呼ばれるものは、バイナリ ヒープを指します。ヒープの特徴は、ルート ノードが最小 (または最大) の値を持ち、ルート ノードの 2 つのサブツリーもヒープであることです。

ハッシュ テーブル

構造内に K に等しいキーワードを持つレコードがある場合、それは f(K) の格納場所に存在する必要があります。したがって、検索対象のレコードを比較することなく直接取得できます。

この対応関係をハッシュ関数(ハッシュ関数)と呼び、この考え方に基づいて作られたテーブルがハッシュテーブルです。

関連する推奨事項:

Java 面接の質問と回答

以上がJavaのデータ構造とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles