bra*_*orm 2 java collections comparator treeset
我有以下代码,我有一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
PS.我知道StringBuffer是一个bad在Set中保持元素的类型.但是,我正在测试Java是否允许在Set中保留一个可变对象.(python不允许将可变对象放在集合或字典中(map))
Collections.sort()只能应用于a List,而你传递的Set是失败的(它根本不应该编译).
TreeSet是一个已排序的Set,因此您应该使用适当的方法创建它,Comparator并且该组的内容将始终排序,而无需手动对其进行排序.
| 归档时间: |
|
| 查看次数: |
2229 次 |
| 最近记录: |