国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

Javaのデータ構(gòu)造とは何ですか?

Apr 12, 2021 pm 02:34 PM
java データ構(gòu)造

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

Javaのデータ構(gòu)造とは何ですか?

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

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

Collection---->Collections   
Map----->SortedMap------>TreeMap          Map------>HashMap
Collection---->List----->(Vector \ ArryList \ LinkedList)
Collection---->Set------>(HashSet \ LinkedHashSet \ SortedSet)

List (インターフェイス)

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

Vector

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

ArrayList

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

LinkedList

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

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

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

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

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

リストの概要

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

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

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

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

Set (インターフェイス)

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

HashSet

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

LinkedHashSet

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

SortedSet

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

Map (インターフェイス)

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

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

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

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

HashMap

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

TreeMap

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

HashTable

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

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

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

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

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

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

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

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

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

Vector、ArrayList、LinkedList

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

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

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

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

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

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

スタック

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

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

Queue

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

挿入操作を?qū)g行する端はキューの末尾と呼ばれ、削除操作を?qū)g行する端はキューの先頭と呼ばれます。キュー內(nèi)に要素が存在しない場合、それは空のキューと呼ばれます。

配列

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

リンク リスト

物理ストレージ ユニット上の非連続かつ非順次のストレージ構(gòu)造。データ要素の論理的順序は、リンク リスト內(nèi)のポインタ リンク順序によって実現(xiàn)されます。

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

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) を持つことができます。

ヒープ

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

ハッシュ テーブル

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

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

関連する推奨事項:

Java 面接の質(zhì)問と回答

以上がJavaのデータ構(gòu)造とは何ですか?の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中國語版

SublimeText3 中國語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JDBCを使用してJavaのトランザクションを処理する方法は? JDBCを使用してJavaのトランザクションを処理する方法は? Aug 02, 2025 pm 12:29 PM

JDBCトランザクションを正しく処理するには、最初に自動コミットモードをオフにし、次に複數(shù)の操作を?qū)g行し、結(jié)果に応じて最終的にコミットまたはロールバックする必要があります。 1。CONN.SETAUTOCOMMIT(FALSE)を呼び出して、トランザクションを開始します。 2。挿入や更新など、複數(shù)のSQL操作を?qū)g行します。 3。すべての操作が成功した場合はconn.commit()を呼び出し、データの一貫性を確保するために例外が発生した場合はconn.rollback()を呼び出します。同時に、リソースを使用してリソースを管理し、例外を適切に処理し、接続を密接に接続するために、接続の漏れを避けるために使用する必要があります。さらに、接続プールを使用してセーブポイントを設(shè)定して部分的なロールバックを達(dá)成し、パフォーマンスを改善するためにトランザクションを可能な限り短く保つことをお勧めします。

Javaでカレンダーを操作する方法は? Javaでカレンダーを操作する方法は? Aug 02, 2025 am 02:38 AM

Java.Timeパッケージのクラスを使用して、古い日付とカレンダーのクラスを置き換えます。 2。LocalDate、LocalDateTime、LocalTimeを通じて現(xiàn)在の日付と時刻を取得します。 3。of()メソッドを使用して特定の日付と時刻を作成します。 4.プラス/マイナスメソッドを使用して、時間を不正に増加させて短縮します。 5. ZonedDateTimeとZoneIDを使用して、タイムゾーンを処理します。 6。DateTimeFormatterを介したフォーマットおよび解析の文字列。 7.インスタントを使用して、必要に応じて古い日付型と互換性があります?,F(xiàn)代のJavaでの日付処理は、java.timeapiを使用することを優(yōu)先する必要があります。

Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Javaフレームワークの比較:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-formanceTartuptimeMemoryusage、quarkusandmicronautleadduetocopile-timeprocessingingandgraalvsupport、withquarkusoftentylightbetterine serverlessシナリオ。

Garbage CollectionはJavaでどのように機(jī)能しますか? Garbage CollectionはJavaでどのように機(jī)能しますか? Aug 02, 2025 pm 01:55 PM

JavaのGarbage Collection(GC)は、メモリを自動的に管理するメカニズムであり、到達(dá)不可能なオブジェクトを取り戻すことでメモリ漏れのリスクを軽減します。 1.GCルートオブジェクトからのオブジェクトのアクセシビリティ(スタック変數(shù)、アクティブスレッド、靜的フィールドなど)、および到達(dá)不可能なオブジェクトはゴミとしてマークされています。 2。マーククリアリングアルゴリズムに基づいて、すべての到達(dá)可能なオブジェクトをマークし、マークのないオブジェクトをクリアします。 3.世代の収集戦略を採用する:新世代(Eden、S0、S1)は頻繁にMinorGCを?qū)g行します。高齢者のパフォーマンスは少なくなりますが、MajorGCを?qū)g行するのに時間がかかります。 Metaspaceはクラスメタデータを保存します。 4。JVMはさまざまなGCデバイスを提供します。SerialGCは小さなアプリケーションに適しています。 ParallelGCはスループットを改善します。 CMSが減少します

ユーザーデータにHTML「入力」タイプを使用します ユーザーデータにHTML「入力」タイプを使用します Aug 03, 2025 am 11:07 AM

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるURL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

Javaビルドツールの比較:Maven vs. Gradle Javaビルドツールの比較:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

gradleisthebetterchoiceformostnewprojectoitssuperorfficability、performance、andmoderntoolingsupport.1.gradle’sgroovy/kotlindslismoreconciseandexpressiveethanmaven’sverboseml.2.gradleorformsmavenbenbumebutedwitedwitedwitedspedexは

説明された延期聲明の例で進(jìn)みます 説明された延期聲明の例で進(jìn)みます Aug 02, 2025 am 06:26 AM

Deferは、クリーニングリソースなど、関數(shù)が戻る前に指定された操作を?qū)g行するために使用されます。パラメーターは、延期時にすぐに評価され、関數(shù)は最後のファーストアウト(LIFO)の順に実行されます。 1.複數(shù)の債務(wù)は、宣言の逆の順序で実行されます。 2.ファイルの閉鎖などの安全なクリーニングに一般的に使用されます。 3。指定された返品値を変更できます。 4.回復(fù)に適したパニックが発生した場合でも実行されます。 5。リソースの漏れを防ぐために、ループで延期の亂用を避けます。正しい使用により、コードのセキュリティと読みやすさが向上します。

HTTPミドルウェアロギングの例を例に進(jìn)めます HTTPミドルウェアロギングの例を例に進(jìn)めます Aug 03, 2025 am 11:35 AM

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時間と終了時間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機(jī)能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

See all articles