20260118_Setは重複を許さないコレクションだがそもそも「重複」とは何か
SetはListはいずれもコレクションだが、Listは要素の重複を許し、Setは要素の重複を許さない。この文脈における「重複」が何を意味するかは、Setの実装により異なる。個人的によく使うHashSetの場合について書くと、 hashCode()により比較対象を絞り込んだ上で、 equals() がtrueの場合に「重複」と言う(結局は、要素Aと要素Bが「重複」と判定されるには、 hashCode()の値が一致しており、かつ equals()がtrueである必要がある)。
java
//UserクラスではhashCode(),equals()をオーバーライドしていないとする
User user1 = new User("John");
User user2 = new User("Mike");
User user3 = user2;
List<User> list = new ArrayList<>();
list.add(user1); //追加される
list.add(user2); //追加される
list.add(user3); //追加される
Set<User> set = new HashSet<>();
set.add(user1); //追加される
set.add(user2); //追加される
set.add(user3); //user3はuser2と重複しているため追加されない