czy obiekty StringBuffer mogą być kluczami w TreeSet w Javie?

Mam następujący kod, w którym próbuję umieścić obiekty StringBuffer jako klucze w TreeSet. Powodem, dla którego to robię, jest sprawdzenie, czy mogę umieścić zmienne obiekty jako klucze. Nie dostaję żadnego błędu kompilacji. ale po uruchomieniu tego kodu pojawia się błąd poniżej kodu. specjalnie, rozumiem tojava.lang.StringBuffer cannot be cast to java.lang.Comparable. co wskazuje ten błąd?

z javadoc Widzę, że klasa StringBuffer została uznana za ostateczną (public final class StringBuffer), czy to nie znaczy, że jest niezmienny, a zatem ma haszowalny?

Jestem nowicjuszem do mieszania i niezmiennych rzeczy, więc uprzejmie pomóż mi tutaj.

Dzięki

import java.util.*;
class MutableKeys {
public static void main(String[] args) {
        StringBuffer one = new StringBuffer("one");
        StringBuffer  two = new StringBuffer("two");
        StringBuffer three = new StringBuffer("three");
        Set<StringBuffer> sb=new TreeSet<StringBuffer>();
        sb.add(one);
        sb.add(two);
        sb.add(three);
        System.out.println("set before change: "+ sb);
        one.append("onemore");
        System.out.println("set After change: "+ sb);
    }
}

Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuffer cannot be cast to java.lang.Comparable
    at java.util.TreeMap.put(TreeMap.java:542)
    at java.util.TreeSet.add(TreeSet.java:238)
    at inheritance.MutableKeys.main

questionAnswers(7)

yourAnswerToTheQuestion