У меня есть следующий код, в котором я пытаюсь поместить объекты 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