ホームページ Java &#&チュートリアル Java における Set、List、Map の使用法と違いの紹介

Java における Set、List、Map の使用法と違いの紹介

Jan 22, 2017 pm 03:19 PM

コレクション インターフェイス: コレクションは最も基本的なコレクション インターフェイスであり、JAVA コレクション (Set と List のみを含む) に適用できる共通メソッドを宣言します。 Set と List はどちらも Collection と Map

Collection インターフェースのメソッドを継承します:

boolean add(Object o): オブジェクトへの参照をコレクションに追加します

void clear(): コレクション内のすべてのオブジェクトを削除します。維持されなくなりました これらのオブジェクトへの参照があります
boolean isEmpty(): コレクションが空かどうかを判断します
boolean contains(Object o): コレクションが特定のオブジェクトへの参照を保持しているかどうかを判断します
Iterartor iterator(): Iterator オブジェクトを返しますコレクションを走査するために使用できます
boolean Remove(Object o) の要素: コレクションからオブジェクトへの参照を削除します

int size(): コレクション内の要素の数を返します

Object[] toArray( ): コレクションを含む配列を返します

About のすべての要素: Iterator() メソッドと toArray() メソッドはコレクションのすべての要素に使用され、前者は Iterator オブジェクトを返し、後者はすべての要素を含む配列を返します。コレクションの中で。

Iterator インターフェイスは次のメソッドを宣言します:

hasNext(): コレクション内の要素が走査されたかどうかを判断し、そうでない場合は true を返します

next(): 次の要素を返します
remove(): 前の要素を削除します。コレクション next() メソッドによって返される要素。

セット(セット):セットは最も単純な種類のセットです。コレクション内のオブジェクトは特定の順序で並べられておらず、重複するオブジェクトはありません。 Set インターフェースは主に 2 つの実装クラスを実装します:

HashSet: HashSet クラスはハッシュ アルゴリズムに従ってセット内のオブジェクトにアクセスし、アクセス速度は比較的高速です。

TreeSet: TreeSet クラスは SortedSet インターフェースを実装し、セット内のオブジェクトを並べ替えます。

Setの使用法: オブジェクトの参照を保存します。重複するオブジェクトはありません

Set set=new HashSet();
String s1=new String("hello");
String s2=s1;
String s3=new String("world");
set.add(s1);
set.add(s2);
set.add(s3);
ログイン後にコピー

System.out.println(set.size());//印刷セット内のオブジェクトの数は2です。

Set の add() メソッドは、オブジェクトがコレクションに格納されているかどうかをどのように判断しますか?

boolean isExists=false;
Iterator iterator=set.iterator();
while(it.hasNext()) {
String oldStr=it.next();
if(newStr.equals(oldStr)){
isExists=true;
}
}
ログイン後にコピー

List (リスト): List の特徴は、その要素が線形に格納され、繰り返しのオブジェクトをコレクションに格納できることです。

List インターフェースの主な実装クラスには以下が含まれます:

ArrayList(): 長さを変更できる配列を表します。要素にはランダムにアクセスでき、ArrayList() への要素の挿入と削除は時間がかかります。
LinkedList(): 実装ではリンクされたリストのデータ構造を使用します。挿入と削除は高速ですが、アクセスは低速です。

Listのランダムアクセスとは、特定の位置にある要素のみをランダムに取得することを意味します。 List の get(int index) メソッドは、コレクション内のパラメーターのインデックスで指定されたインデックス位置にあるオブジェクトを返します。添え字は "0" から始まります。コレクション内のすべてのオブジェクトを取得する 2 つの最も基本的なメソッド:

1: for ループおよび get() メソッド:

for(int i=0; i<list.size();i++){
System.out.println(list.get(i));
}
ログイン後にコピー

2: イテレーターの使用 (Iterator):

Iterator it=list.iterator();
while(it.hashNext){
System.out.println(it.next);
}
ログイン後にコピー

Map (map): Map は Aキー オブジェクトと値オブジェクトをマップするコレクション。その各要素には、キー オブジェクトと値オブジェクトのペアが含まれます。

Map は Collection インターフェイスから継承しません。Map コレクションから要素を取得する場合、キー オブジェクトが指定されている限り、対応する値オブジェクトが返されます。

Map の共通メソッド:

1 追加および削除操作:

Object put(Object key, Object value): コレクションに要素を追加

Object Remove(Object key): KEY に関連する要素を削除
void putAll( Map t): 特定の画像のすべての要素を画像に追加します
void clear(): 画像からすべてのマッピングを削除します

2 クエリ操作:

Object get(Object key): キーワード key に関連する値を取得します。 Map コレクション内のキー オブジェクトを繰り返すことはできません。つまり、equals() メソッドを使用して 2 つのキー オブジェクトを比較した結果は false になります。ただし、複数のキーは同じ値オブジェクトに排他的にマップできます。

Conllections: コレクションユーティリティクラス。 Collections は、JAVA コレクションの実用的な静的メソッドを提供します

概要:

JAVA コレクションの基本的な使用方法をまとめました。その他の詳細については、JDK のヘルプ ドキュメントを参照してください (笑)。 Map の他のアプリケーション、特にこのアプリケーションでは、日常の開発に非常に役立つ List/Map の実用的なメソッドが多数提供されています。

boolean containsKey(Object key): キーワードキーが画像に存在するかどうかを判断します

boolean containsValue(Object value): value 値が画像に存在するかどうかを判断します
int size(): 現在の画像内のマッピングの数を返します
boolean isEmpty() : 画像内にマッピングがあるかどうかを判断します。

List は、並べ替えや編集操作を行わずに、入力された順序でオブジェクトを保存します。 Set は各オブジェクトを 1 回だけ受け入れ、独自の内部ソート方法を使用します (通常、要素が順序ではなく、要素が Set に属しているかどうかのみを考慮します。そうでない場合は、List を使用する必要があります)。

Map は各要素のコピーも保存しますが、これは「キー」に基づいているため、要素が追加される順序は関係ありません。要素が追加される順序が重要な場合は、LinkedHashSet または LinkedHashMap を使用する必要があります。

List の関数メソッド:

実際には 2 つのタイプがあります。1 つは基本的な ArrayList で、要素にランダムにアクセスするという利点があります。もう 1 つは、より強力な LinkedList です。これは、高速ランダム アクセス用に設計されていませんが、より一般的なメソッドのセットを備えています。

リスト: 順序はリストの最も重要な機能です。これにより、要素の特定の順序が確実に維持されます。 List は Collection に多くのメソッドを追加し、List の途中で要素を挿入および削除できるようにします (これは LinkedList に対してのみ推奨されます)。List は ListIterator を生成でき、これを使用して List を 2 方向に走査できます。リストの削除要素の途中から挿入および移動することもできます。
ArrayList: 配列によって実装されたリスト。要素への高速なランダム アクセスが可能ですが、リストの途中で要素を挿入したり削除したりするのは非常に遅くなります。 ListIterator は、要素の挿入や削除ではなく、ArrayList を後ろから前に走査するためにのみ使用する必要があります。それはLinkedListよりもはるかに高価だからです。
LinkedList: 順次アクセスが最適化されており、リストの途中での挿入と削除のオーバーヘッドは大きくありません。ランダムアクセスは比較的遅いです。 (代わりに ArrayList を使用してください。) 次のメソッドもあります: addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast()。これらのメソッドは (どのインターフェイスまたは基本クラスにも定義されていません) LinkedList を作成します。スタック、キュー、両端キューとして使用できます。

Set の関数メソッド:
Set は Collection とまったく同じインターフェイスを持っているため、前の 2 つの異なる List とは異なり、追加の関数はありません。実際、Set は Collection ですが、その動作は異なります。 (これは、継承とポリモーフィックなアイデアの典型的な応用です。異なる動作を示します。) Set は重複した要素を保存しません (要素が同じであると判断する方法については、より責任があります)

Set: Set に格納される各要素Set は重複した要素を保存しないため、一意である必要があります。 Set に追加される要素は、オブジェクトの一意性を保証するために、equals() メソッドを定義する必要があります。 Set と Collection はまったく同じインターフェイスを持っています。 Set インターフェイスは、要素の順序が維持されることを保証しません。
HashSet: 素早い検索のために設計されたセット。 HashSet に格納されるオブジェクトは hashCode() を定義する必要があります。
TreeSet: 順序を保存するセット。最下層はツリー構造です。これを使用して、セットから順序付けされたシーケンスを抽出します。

LinkedHashSet: HashSet のクエリ速度を持ち、内部的にリンク リストを使用して要素の順序 (挿入順序) を維持します。したがって、反復子を使用して Set を走査すると、結果は要素が挿入された順序で表示されます。

Map の Function メソッド:

メソッド put(Object key, Object value) は、「値」(取得したいもの) と、「値」に関連付けられた「キー」(キー) (検索に使用します) を追加します。 )。 get(Object key) メソッドは、指定された「キー」に関連付けられた「値」を返します。 containsKey() と containsValue() を使用して、マップに特定の「キー」または「値」が含まれているかどうかをテストできます。
標準 Java クラス ライブラリには、いくつかの異なるマップが含まれています: HashMap、TreeMap、LinkedHashMap、WeakHashMap、IdentityHashMap。これらはすべて同じ基本インターフェイス Map を持っていますが、その動作、効率、並べ替え戦略、保存されたオブジェクトのライフ サイクル、および「キー」の同等性を決定する戦略が異なります。
実行効率は Map にとって大きな問題です。 get() の動作を見てみると、ArrayList 内の「キー」の検索が非常に遅い理由がわかります。ここで HashMap の速度が向上します。 HashMap は、ハッシュ コードと呼ばれる特別な値を使用して、キーの遅い検索を置き換えます。
「ハッシュ コード」は、オブジェクトを表すために使用される「比較的一意な」int 値であり、オブジェクトに関する特定の情報を変換することによって生成されます。 hashCode() は基本クラス Object で定義されたメソッドであるため、すべての Java オブジェクトはハッシュ コードを生成できます。
HashMap は、オブジェクトの hashCode() を使用して迅速なクエリを実行します。このアプローチにより、パフォーマンスが大幅に向上します。

Map: 「キーと値のペア」の相関関係を維持し、「キー」を通じて「値」を検索できるようにします。

HashMap: ハッシュ テーブルのマップ ベースの実装。キーと値のペアの挿入とクエリのコストは固定です。容量と負荷率はコンストラクターを通じて設定して、コンテナーのパフォーマンスを調整できます。
LinkedHashMap: HashMap に似ていますが、HashMap を反復処理する場合、「キーと値のペア」が取得される順序は、挿入順序、または最も最近使用されていない (LRU) 順序になります。 HashMap よりもわずかに遅いだけです。内部順序を維持するためにリンク リストを使用するため、反復アクセスが高速になります。
TreeMap: 赤黒ツリー データ構造に基づいた実装。 「キー」または「キーと値のペア」を表示すると、それらは並べ替えられます (順序は Comparabel または Comparator によって決まります)。 TreeMap の特徴は、得られる結果がソートされていることです。 TreeMap は、サブツリーを返すことができる subMap() メソッドを持つ唯一の Map です。
WeakHashMap: 弱いキー マップ。マップで使用されるオブジェクトも解放できます。これは、特別な問題を解決するために設計されています。マップの外に「キー」を指す参照がない場合、この「キー」はガベージ コレクターによってリサイクルできます。

IdentifyHashMap: 「キー」を比較するために、equals() の代わりに == を使用するハッシュ マップ。特殊な問題を解決するように設計されています。

Java での Set、List、Map の使用法と違いに関するその他の関連記事については、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)

2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte 2025年のトップ4 JavaScriptフレームワーク:React、Angular、Vue、Svelte Mar 07, 2025 pm 06:09 PM

この記事では、2025年の上位4つのJavaScriptフレームワーク(React、Angular、Vue、Svelte)を分析し、パフォーマンス、スケーラビリティ、将来の見通しを比較します。 強力なコミュニティと生態系のためにすべてが支配的なままですが、彼らの相対的なポップ

Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Spring Boot Snakeyaml 2.0 CVE-2022-1471問題修正 Mar 07, 2025 pm 05:52 PM

この記事では、リモートコードの実行を可能にする重大な欠陥であるSnakeyamlのCVE-2022-1471の脆弱性について説明します。 Snakeyaml 1.33以降のSpring Bootアプリケーションをアップグレードする方法は、このリスクを軽減する方法を詳述し、その依存関係のアップデートを強調しています

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

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

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

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

node.js 20:キーパフォーマンスが向上し、新機能 node.js 20:キーパフォーマンスが向上し、新機能 Mar 07, 2025 pm 06:12 PM

node.js 20は、V8エンジンの改善、特により速いガベージコレクションとI/Oを介してパフォーマンスを大幅に向上させます。 新機能には、より良いWebセンブリのサポートと洗練されたデバッグツール、開発者の生産性とアプリケーション速度の向上が含まれます。

Iceberg:データレイクテーブルの未来 Iceberg:データレイクテーブルの未来 Mar 07, 2025 pm 06:31 PM

大規模な分析データセットのオープンテーブル形式であるIcebergは、データの湖のパフォーマンスとスケーラビリティを向上させます。 内部メタデータ管理を通じて、寄木細工/ORCの制限に対処し、効率的なスキーマの進化、タイムトラベル、同時wを可能にします

キュウリのステップ間でデータを共有する方法 キュウリのステップ間でデータを共有する方法 Mar 07, 2025 pm 05:55 PM

この記事では、キュウリの手順間でデータを共有する方法、シナリオコンテキスト、グローバル変数、引数の合格、およびデータ構造を比較する方法を調べます。 簡潔なコンテキストの使用、記述など、保守性のためのベストプラクティスを強調しています

Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Javaで機能的なプログラミング技術を実装するにはどうすればよいですか? Mar 11, 2025 pm 05:51 PM

この記事では、Lambda式、Streams API、メソッド参照、およびオプションを使用して、機能プログラミングをJavaに統合することを調べます。 それは、簡潔さと不変性を通じてコードの読みやすさと保守性の改善などの利点を強調しています

See all articles