
シリーズ コレクション機能の設定:
Set コレクション実装クラスの機能:
HashSet: 順序付けされておらず、繰り返しもなく、インデックスなし
LinkedHashSet: 順序付け済み、非繰り返し、インデックスなし
TreeSet: 並べ替え済み、非繰り返し、インデックスなし
Set コレクションの機能は基本的に Collection の API と同じです。
HashSet コレクション
HashSet コレクション:
1 2 3 4 5 6 7 8 | 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 コレクション:
1 2 3 4 5 6 7 8 | Set<String> set = new LinkedHashSet<>();
set.add( "石原里美" );
set.add( "石原里美" );
set.add( "工藤静香" );
set.add( "朱茵" );
System.out.println(set);
set.remove( "朱茵" );
System.out.println(set);
|
ログイン後にコピー
出力結果:

上記のコードを使用して結果を出力します比較すると、Disordered と Ordered の違いがわかります。前者は受信データの順序を乱しますが、後者は入力データの順序でデータを格納するため、出力は順序付けられた状態になります。
TreeSet コレクション:
TreeSet コレクション:
1 2 3 4 5 6 7 8 | 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 を直接並べ替えることができず、エラーが発生します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | 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 + '\'' +
'}';
}
}
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 メソッドを書き換えて比較ルールを指定します (冗長で無関係なコードはここでは繰り返されません。コードの重要な部分のみが示されています)
1 2 3 4 5 6 7 8 | public class People implements Comparable<People> {
@Override
public int compareTo(People o) {
return this.age-o.age;
}
}
|
ログイン後にコピー
出力結果 (年齢に基づく比較):

オーバーライドされたメソッドでは、戻り後のコードによって、オブジェクトがどのような基準に従って比較されるかが決定されます。比較ルールは次のとおりです。
- 最初の要素が 2 番目の要素より大きいとみなされる場合、正の整数が返されます。
- 最初の要素が 2 番目の要素より小さいとみなされる場合は、2 つの要素に対して負の整数を返します。
- 最初の要素が 2 番目の要素と等しいと思われる場合は、0 を返します。現時点では、Treeset コレクションは 1 つの要素のみを保持し、2 つは重複とみなされます。
方法 2: コレクションには、ルール定義用の独自のコンパレータ オブジェクトが付属します
1 2 3 4 5 6 | 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 サイトの他の関連記事を参照してください。