ホームページ  >  記事  >  Java  >  Javaでセットコレクションを適用する方法

Javaでセットコレクションを適用する方法

WBOY
WBOY転載
2023-06-03 08:22:081247ブラウズ

Javaでセットコレクションを適用する方法


シリーズ コレクション機能の設定:

  • 順序なし: アクセス 順序は次のとおりです。 inconsistent

  • 重複なし: 重複は削除可能

  • インデックスなし: インデックス付きメソッドがないため、通常の for ループ走査は使用できません。および要素はインデックスによって取得できません

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

HashSet: 順序付けされておらず、繰り返しもなく、インデックスなし

LinkedHashSet: 順序付け済み、非繰り返し、インデックスなし

TreeSet: 並べ替え済み、非繰り返し、インデックスなし

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);

出力結果:

Javaでセットコレクションを適用する方法

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

Javaでセットコレクションを適用する方法

上の図に基づいて、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);

出力結果:

Javaでセットコレクションを適用する方法

上記のコードを使用して結果を出力します比較すると、Disordered と Ordered の違いがわかります。前者は受信データの順序を乱しますが、後者は入力データの順序でデータを格納するため、出力は順序付けられた状態になります。

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);

出力結果:

Javaでセットコレクションを適用する方法

#上記のコードと出力結果を通じて、 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=&#39;" + name + &#39;\&#39;&#39; +
                ", age=" + age +
                ", classroom=&#39;" + classroom + &#39;\&#39;&#39; +
                &#39;}&#39;;
    }
}
//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;
    }
}

出力結果 (年齢に基づく比較):

Javaでセットコレクションを適用する方法

オーバーライドされたメソッドでは、戻り後のコードによって、オブジェクトがどのような基準に従って比較されるかが決定されます。比較ルールは次のとおりです。

  • 最初の要素が 2 番目の要素より大きいとみなされる場合、正の整数が返されます。

  • 最初の要素が 2 番目の要素より小さいとみなされる場合は、2 つの要素に対して負の整数を返します。

  • 最初の要素が 2 番目の要素と等しいと思われる場合は、0 を返します。現時点では、Treeset コレクションは 1 つの要素のみを保持し、2 つは重複とみなされます。

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

Set<People> p = new TreeSet<>(new Comparator<People>() {
            @Override
            public int compare(People o1, People o2) {
                return o1.getAge()-o2.getAge();
            }
        });

オリジナルに基づいてコレクションの作成を変更し、その比較基準は以前のものと同じです 定義方法は同様ですが、以前の方法と比較して、この方法はより便利で高速です。以前に学習したラムダ式を使用して、このコード ブロックを簡素化できます。

rree

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

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。