TreeSetが重複要素をチェックする方法をチェックしていて、次のコードがあります
import java.util.*;
public class TreeDemo{
public static void main(String[] args)
{
new TreeDemo().go();
}
public void go()
{
Song s1 = new Song("song1","artist1");
Song s2 = new Song("song2","artist2");
Song s3 = new Song("song3","artist3");
Song s4 = new Song("song3","artist3");
Set<Song> tree = new TreeSet<Song>();
tree.add(s1);
tree.add(s2);
tree.add(s3);
tree.add(s4);
System.out.println(tree);
}
}
class Song implements Comparable<Song>{
private String title;
private String artist;
public Song(String t, String a)
{
title=t;
artist=a;
}
public String getTitle(){
return title;
}
public int compareTo(Song s){
//Song s = (Song)o;
return title.compareTo(s.getTitle());
}
public String toString(){
return title;
}
}
このコードを実行すると、次の出力が得られます
[song1, song2, song3]
私の質問は:-
- hashCode and equalsメソッドを実装していなくても(Comparableインターフェースは必須であり、Setをソートしておく必要があるため実装しました)、TreeSetはどのようにして重複を判別しましたか?
- Objectクラスのデフォルト実装を使用しましたか?追加すると重複として扱われるので、このチェックに「タイトル」フィールドを使用したように見えますが、追加すると重複として扱われません。
ありがとう。