検索
ホームページJava&#&チュートリアルJava のセット コレクションを理解する方法

この記事では、java に関する関連知識を提供します。主にセット コレクションに関する関連問題を紹介します。セット コレクションの特徴は、不規則で、繰り返しがなく、インデックスがありません。以下は見てみましょう。それがみんなに役立つことを願っています。

Java のセット コレクションを理解する方法

推奨学習: 「java ビデオ チュートリアル

セット シリーズ コレクションの機能:

  • 無順序: アクセス順序が矛盾しています
  • 重複なし: 重複を削除できます
  • インデックスなし: インデックス付きメソッドがないため、通常のメソッドは削除できませんループトラバーサルの場合、要素はインデックスによって取得できません。

Set コレクション実装クラスの機能:

HashSet: 順序なし、重複なし、インデックスなし

LinkedHashSet:順序あり、重複なし、インデックスなし

TreeSet:並べ替え、重複なし、 No Index

Set コレクションの機能は基本的に Collection の API と同じです。

HashSet コレクション

HashSet コレクション:

Set<string> set = new HashSet();
        set.add("石原里美");
        set.add("石原里美");
        set.add("工藤静香");
        set.add("朱茵");
        System.out.println(set);
        set.remove("朱茵");
        System.out.println(set);</string>

出力結果:

上記のコードと実行結果から、HashSet コレクションが無秩序で反復していないことがはっきりとわかります;

上の図と組み合わせると、HashSet がコレクションはできません データは get() メソッドのインデックスを通じて取得されます。コレクション内のデータを削除する場合、データは対象を絞った方法でのみ削除できます。

LinkedHashSet コレクション:

LinkedHashSet コレクション:

Set<string> set = new LinkedHashSet();
        set.add("石原里美");
        set.add("石原里美");
        set.add("工藤静香");
        set.add("朱茵");
        System.out.println(set);
        set.remove("朱茵");
        System.out.println(set);</string>

出力結果:

Passed上記のコードと出力結果を比較すると、無秩序と順序の違いがわかります。前者は受信データの順序を乱しますが、後者は入力データの順序でデータを格納するため、出力時間は順調です。

TreeSet コレクション:

TreeSet コレクション:

Set<integer> set = new TreeSet();
        set.add(13);
        set.add(23);
        set.add(23);
        set.add(11);
        System.out.println(set);
        set.remove(23);
        System.out.println(set);</integer>

出力結果:

合格上記のコードと出力結果から、TreeSet がソートを特徴とする理由、つまり、格納されたデータが Java のデフォルトのソート方法に従ってソートされる理由を文字通り理解できます。

ただし、この時点で People などのカスタム オブジェクトを格納すると、TreeSet を直接並べ替えることができず、エラーが発生します。

//People类:
public class People{
    private String name;
    private int age;
    private String classroom;

    public People(){

    }
    public People(String name, int age, String classroom) {
        this.name = name;
        this.age = age;
        this.classroom = classroom;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getClassroom() {
        return classroom;
    }

    public void setClassroom(String classroom) {
        this.classroom = classroom;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", classroom='" + classroom + '\'' +
                '}';
    }
}
//main方法:
public static void main(String[] args) {
        Set<people> p = new TreeSet();
        p.add(new People("张三",19,"智能"));
        p.add(new People("李四",18,"数据库"));
        p.add(new People("王五",20,"渗透"));
        System.out.println(p);
    }</people>

この問題を解決したい場合は、TreeSet コレクションのストレージの種類をカスタマイズする必要があります。この問題を解決するには 2 つの方法があります: 1 つは、実装するクラスをカスタマイズすることです。 Comparable インターフェイスと内部の CompareTo メソッドを書き換えてルールを指定します。もう 1 つのは、ルール定義用の独自のコンパレータ オブジェクトを持つコレクションです。

方法 1: カスタム クラスは Comparable インターフェイスを実装し、compareTo メソッドを書き換えて比較ルールを指定します (冗長で無関係なコードはここでは繰り返さず、コードの重要な部分のみを示します) ) )

//改变的第一个地方:实现Comparable类
public class People implements Comparable<people> {
//改变的第二个地方:重写Comparable类中的compareTo方法    
    @Override
    public int compareTo(People o) {
        return this.age-o.age;
    }
}</people>
出力結果 (年齢に応じて比較):

オーバーライドされたメソッドでは、return 後のコードによってオブジェクトが何を処理するかが決まります。比較ルールは次のとおりです。

    最初の要素が 2 番目の要素より大きいとみなされる場合、正の整数を返すことができます。
  • 最初の要素が2 番目の要素より小さいと見なされます。負の整数を返してください。
  • 最初の要素が 2 番目の要素と等しいと思われる場合は、0 を返してください。現時点では、Treeset コレクションには 1 つの要素のみが保持されます。両方とも重複とみなされます

方法 2:コレクションにはルール定義用のコンパレータ オブジェクトが付属しています

Set<people> p = new TreeSet(new Comparator<people>() {
            @Override
            public int compare(People o1, People o2) {
                return o1.getAge()-o2.getAge();
            }
        });</people></people>
元のベースに基づいてコレクションの作成を変更します。その比較基準は以前の定義方法と似ており、比較的以前の方法の方が便利で高速です。ここで、以前に学習した知識「ラムダ式」の一部を復習し、コード ブロックを簡略化することもできます。

Set<people> p = new TreeSet((o1, o2) -> o1.getAge()-o2.getAge());</people>
ラムダ式を学習したことがない場合、またはラムダ式の知識が明確でない場合は、Java でラムダ式を理解する方法を参照してください。この記事の説明を簡略化すると、何か役に立つかもしれません。

推奨学習: 「Java ビデオ チュートリアル

以上がJava のセット コレクションを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、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ヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

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

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

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

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール