【发布时间】:2013-09-06 22:18:00
【问题描述】:
我有以下代码,其中我有一个 Treeset,如果我将比较器传递给它,它就可以正常工作。 但是,如果我构造我的 Treeset 然后调用 collections.sort,我会得到编译错误。 我的代码在这里
import java.util.*;
public class ComparatorExample {
private static class SbufferComparator implements Comparator<StringBuffer> {
@Override
public int compare(StringBuffer s1, StringBuffer s2) {
return s1.toString().compareTo(s2.toString());
}
}
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>();
//The below line works
//Set<StringBuffer> sb=new TreeSet<StringBuffer>(new SbufferComparator());
sb.add(one);
sb.add(two);
sb.add(three);
System.out.println("set before change: "+ sb);
//This does not work
Collections.sort(sb, new SbufferComparator());
System.out.println("set After change: "+ sb);
}
}
PS。我知道StringBuffer 是一个bad 类型,可以作为Set 中的元素保留。但是,我正在测试 Java 是否允许在 Set 中保留可变对象。 (python 不允许将可变对象放在集合或字典(map)中)
【问题讨论】:
-
另请注意 StringBuffer 已过时 - 您应该改用 StringBuilder。
标签: java collections comparator treeset