目次
HashSet コレクション
LinkedHashSet コレクション:
TreeSet コレクション:
ホームページ Java &#&チュートリアル Java のセット コレクションを理解する方法

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

Jun 20, 2022 am 11:31 AM
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);
ログイン後にコピー

出力結果:

上記のコードと実行結果から、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);
ログイン後にコピー

出力結果:

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);
ログイン後にコピー

出力結果:

合格上記のコードと出力結果から、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);
    }
ログイン後にコピー

この問題を解決したい場合は、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;
    }
}
ログイン後にコピー
出力結果 (年齢に応じて比較):

オーバーライドされたメソッドでは、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();
            }
        });
ログイン後にコピー
元のベースに基づいてコレクションの作成を変更します。その比較基準は以前の定義方法と似ており、比較的以前の方法の方が便利で高速です。ここで、以前に学習した知識「ラムダ式」の一部を復習し、コード ブロックを簡略化することもできます。

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

推奨学習: 「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 で完全数を確認する方法、コード実装の例について説明します。

Java の乱数ジェネレーター Java の乱数ジェネレーター Aug 30, 2024 pm 04:27 PM

Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

ジャワのウェカ ジャワのウェカ 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

See all articles