Können StringBuffer-Objekte Schlüssel in TreeSet in Java sein?
Ich habe den folgenden Code, in dem ich versuche, die StringBuffer-Objekte als Schlüssel in ein TreeSet einzufügen. Der Grund, warum ich das tue, ist zu sehen, ob ich veränderbare Objekte als Schlüssel ablegen kann. Ich bekomme keinen Kompilierungsfehler. Aber wenn ich diesen Code ausführe, erhalte ich den Fehler, der unter dem Code liegt. speziell verstehe ich dasjava.lang.StringBuffer cannot be cast to java.lang.Comparable
. Was bedeutet dieser Fehler?
aus javadoc sehe ich, dass StringBuffer-Klasse als final deklariert ist (public final class StringBuffer
), heißt das nicht, dass es unveränderlich und daher hashbar ist?
Ich bin ein Neuling in Sachen Hashing und Unveränderliches, also hilf mir bitte hier raus.
Vielen Dank
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