I am checking how TreeSet checks for duplicate elements and have the following code
import java.util.*;
public class TreeDemo{
public static void main(
TreeSet (or technically, the TreeMap that backs it) only uses the compareTo() function to compare the elements.
It does not use Object's .equals() or .hashCode(). Moreover, if it had used any of them, your output would have been
[song1, song2, song3, song3]
because Object's default implementation uses memory addresses to test object equality, not their members.