Setコレクションは重複する要素を格納しないため、この場合に重複する要素を通常どおり追加するとどうなりますか?
public class HashSetDemo {
public static void main(String[] args) {
//创建HashSet集合对象
HashSet<Student> hashSet = new HashSet<Student>();
//创建学生对象
Student s1 = new Student("爱学习", 21);
Student s2 = new Student("爱Java", 22);
Student s3 = new Student("坚持不懈", 23);
Student s4 = new Student("爱Java", 22);
//把学生添加到集合
hashSet.add(s1);
hashSet.add(s2);
hashSet.add(s3);
hashSet.add(s4);
//遍历集合(增强for循环)
for (Student s : hashSet) {
System.out.println(s.getName() + "," + s.getAge());
}
}
}
演算結果:
操作の結果、繰り返し要素が追加されていることがわかりましたが、その理由は何ですか?HashSetのソースコード分析と基礎となるデータ構造によると、2つのオブジェクトが同じハッシュ値を持ち(hashCodeメソッド)、オブジェクトのコンテンツも同じである場合(equalsメソッド)、それらは同じではないことがわかります。ハッシュテーブルに格納されます。したがって、重複する要素を追加する問題を解決するには、格納されたオブジェクトクラスのhashCodeメソッドとequalsメソッドを書き直す必要があります。
オブジェクトクラス(自動生成)のhashCodeメソッドとequalsメソッドを書き直した後、上記のコードを実行して結果を実行します。
繰り返される要素がコレクションに追加されていないことがわかります。