SetコレクションのJavaコレクションクラス(3つ)で一般的に使用される実装クラス

一.HashSet

HashSetの基礎となるデータ構造は哈希表要素を使用し无序(つまり、要素のシーケンスが変更されないことは保証されません)、不可重复追加および削除操作の時間計算量はO(1)要素に可以且只可以null値あることです。
さらに、2つの要素が等しいかどうかを判断するためのHashSetコレクションの基準は、equals()メソッドの戻り値がtrueであり、hashCode()メソッドの戻り値も等しいことです。
実際、要素がHashSetコレクションに格納されると、hashCodeメソッドが呼び出されてhashCode値が取得され、メモリ内の要素の格納場所がhashCode値に従って決定されます。

二.LinkedHashSet

LinkHashSetの最下層は哈希表、要素の链表実現に依存しながら、要素の格納場所を一意に決定して一意性を確保します插入有序排列(つまり、要素を追加する順序は、要素にアクセスする順序と一致します)。
デモコード:

package package04_collection;

import java.util.Iterator;
import java.util.LinkedHashSet;

public class LinkedHashSetTest {
    
    
    public static void main(String[] args) {
    
    
        LinkedHashSet<Integer> lhs = new LinkedHashSet<Integer>();
        lhs.add(3);
        lhs.add(4);
        lhs.add(1);
        lhs.add(2);
        lhs.add(2);
        Iterator<Integer> iterator = lhs.iterator();
        while(iterator.hasNext()) {
    
    
            System.out.println(iterator.next());
        }
    }

}

期待される効果を満たします。
ここに写真の説明を挿入

Three.TreeSet

TreeSetコレクションの基礎となる構造は红黑树(平衡二分探索木)であり、これは对元素的排序(カスタマイズ可能な並べ替えルール)の実装に使用され、重複要素を許可せず、null値を持つことはできません
テストコード(自然順序)

package package04_collection;

import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetTest {
    
    
    public static void main(String[] args) {
    
    
        TreeSet<Integer> ts = new TreeSet<>();
        ts.add(2);
        ts.add(3);
        ts.add(4);
        ts.add(1);
        ts.add(1);
        Iterator<Integer> iterator = ts.iterator();
        while(iterator.hasNext()) {
    
    
            System.out.println(iterator.next());
        }
    }
}

効果のスクリーンショット::
ここに写真の説明を挿入
注意TreeSet要素オブジェクトが参照データ型である場合、コンパイラは要素のペアの並べ替え方法を認識していないため、エラーを報告します。このとき、カスタムソートを採用し、Comparatorインターフェースを実装し、compare()メソッドを書き直す必要があります

おすすめ

転載: blog.csdn.net/m0_46550452/article/details/107257032