一.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()メソッドを書き直す必要があります。