объекты StringBuffer могут быть ключами в TreeSet в Java?

У меня есть следующий код, где я пытаюсь поместить объекты StringBuffer в качестве ключей в TreeSet. Причина, по которой я это делаю, состоит в том, чтобы посмотреть, могу ли я поместить изменяемые объекты в качестве ключей. Я не получаю никакой ошибки компиляции. но когда я запускаю этот код, я получаю ошибку, которая находится ниже кода. специально я получаю этоjava.lang.StringBuffer cannot be cast to java.lang.Comparable, что означает эта ошибка?

из javadoc я вижу, что класс StringBuffer объявлен финальным (public final class StringBuffer), не значит ли это, что он неизменен и, следовательно, может быть хэшируем?

Я новичок в хешировании и неизменности, поэтому, пожалуйста, помогите мне здесь.

Спасибо

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

Ответы на вопрос(7)

Ваш ответ на вопрос