Problema Treeset.contains ()

Então, eu estou lutando com um problema há algum tempo, e achei que poderia pedir ajuda aqui.

Estou adicionando objetos Ticket a um TreeSet, Ticket implementa Comparable e substituiu os métodos equals (), hashCode () e CompareTo (). Preciso verificar se um objeto já está no TreeSet usando contains (). Agora, depois de adicionar 2 elementos ao conjunto, tudo sai bem, mas depois de adicionar um terceiro, ele fica bagunçado.

executando esse pequeno pedaço de código após adicionar um terceiro elemento ao TreeSet, o Ticket temp2 é o objeto que estou procurando (verkoopLijst).

    Ticket temp2 = new Ticket(boeking, TicketType.STANDAARD, 1,1);
    System.out.println(verkoop.getVerkoopLijst().first().hashCode());
    System.out.println(temp2.hashCode());

    System.out.println(verkoop.getVerkoopLijst().first().equals(temp2));
    System.out.println(verkoop.getVerkoopLijst().first().compareTo(temp2));
    System.out.println(verkoop.getVerkoopLijst().contains(temp2));

retorna isso:

22106622
22106622
true
0
false

Agora, minha pergunta seria como isso é possível?

Editar:

public class Ticket implements Comparable{

    private int rijNr, stoelNr;
    private TicketType ticketType;
    private Boeking boeking;


    public Ticket(Boeking boeking, TicketType ticketType, int rijNr, int stoelNr){    
        //setters
    }

    @Override
    public int hashCode(){
        return boeking.getBoekingDatum().hashCode();     
    }

    @Override
    @SuppressWarnings("EqualsWhichDoesntCheckParameterClass")    
    public boolean equals(Object o){
       Ticket t = (Ticket) o;

       if(this.boeking.equals(t.getBoeking())
               &&
          this.rijNr == t.getRijNr() &&  this.stoelNr == t.getStoelNr()
               &&
          this.ticketType.equals(t.getTicketType()))
       {
           return true;
       }

       else return false;

    }

    /*I adjusted compareTo this way because I need to make sure there are no duplicate Tickets in my treeset. Treeset seems to call CompareTo() to check for equality before adding an object to the set, instead of equals().


     */
    @Override
    public int compareTo(Object o) {
        int output = 0;
        if (boeking.compareTo(((Ticket) o).getBoeking())==0)
        {
            if(this.equals(o))
            {
                return output;
            }
            else return 1;
        }
        else output = boeking.compareTo(((Ticket) o).getBoeking());
        return output;
    }

    //Getters & Setters

questionAnswers(3)

yourAnswerToTheQuestion