Javaのセットは簡単にまとめて解析します。


Setインターフェースの概要
Setインターフェースは、Listインターフェースと同様に、Collectionインターフェースから継承されており、Collectionインターフェースにおける方法とほぼ一致しており、Collectionインターフェースを機能的に拡張することはなく、Collectionインターフェースよりも厳格である。Listインターフェースとは違って、Setインターフェース要素は無秩序であり、何らかの規則で預け入れ要素が重複しないように保証されます。
Setインターフェースは主に2つの実装クラスがあります。それぞれHashSetとTreeSetです。ここで、HashSetは、オブジェクトのハッシュ値に基づいて、セット内の要素の格納位置を決定し、したがって、良好なアクセスおよび検索性能を有する。TreeSetは、二叉の木のように要素を記憶し、集合中の要素を並べ替えることができます。
ハーシーセット
HashSetはSetインターフェースの実装クラスであり、記憶されている要素は重複不可能であり、要素は無秩序である。HashSetのセットにオブジェクトを追加すると、まず、オブジェクトのハッシュ値を計算するために、オブジェクトのhashCode()方法を呼び出して、要素の格納位置を決定する。このハッシュ値が同じであれば、オブジェクトのequals()方法を再起動して、位置に重複要素がないことを確認する。SetセットとListセットのアクセス要素は同じです。
HashSet集合の使用法を例によって実証した。

public class Example01 {
  public static void main(String[] args) {
    HashSet set = new HashSet();
    set.add("  ");
    set.add("  ");
    set.add("  ");
    set.add("  ");
    Iterator it = set.iterator();
    while(it.hasNext()) {
      Object obj = it.next();
      System.out.println(obj);
    }
  }
}
結論:
集合に要素を預ける時、HashSetが正常に動作するように、オブジェクトを預け入れる時、Object類のhashCodeとequalsを書き換えることが要求されます。
上記のケースでは、HashSetに文字列を格納した場合、SteringクラスはhashCode()とequals()を書き換えました。しかし、もしStudentの対象をHashSetに預けたら、どうなりますか?

class Student{
  String id;
  String name;
  public Student(String id, String name) {
    super();
    this.id = id;
    this.name = name;
  }
  @Override
  public String toString() {
    return id+":"+name;
  }
  @Override
  public int hashCode() {
    return id.hashCode();    //  id      
  }
  @Override
  public boolean equals(Object obj) {
    if(this == obj) {    //          
      return true;    //   ,    true
    }
    if(!(obj instanceof Student)) {    //      Student  
      return false;    //      Student    false
    }
    Student stu = (Student) obj;    //      Student  
    boolean b = this.id.equals(stu.id);    //  id     
    return b;  //      
  }
}
public class Example02 {
  public static void main(String[] args) {
    HashSet set = new HashSet();
    set.add(new Student("1", "  "));
    set.add(new Student("2", "  "));
    set.add(new Student("2", "  "));
    System.out.println(set);
  }
}
Student類はObject類のhashCode()とequals()方法を書き換えました。hashCoded()方法では、id属性のハッシュ値を返し、equals()方法では、オブジェクトのid属性が等しいかどうかを比較し、結果を返す。HashSetのセットのadd()方法を呼び出してstu 3オブジェクトを追加すると、そのハッシュ値はstu 2オブジェクトと同じであり、stu 2.equalsはtrueに戻る。HashSetセットは、2つのオブジェクトが同じと考えられているため、重複したStudentオブジェクトペアは削除されました。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。