我有以下代码,我试图将 StringBuffer 对象作为键放在 TreeSet 中。我这样做的原因是看看我是否可以将可变对象作为键。我没有收到任何编译错误。但是当我运行这段代码时,我得到了代码下方的错误。特别是,我明白了java.lang.StringBuffer cannot be cast to java.lang.Comparable
。这个错误说明了什么?
从 javadoc 我看到 StringBuffer 类被声明为 final ( 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