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。Set の要素として保持StringBuffer
する型であることはわかっています。bad
ただし、Java で変更可能なオブジェクトを Set に保持できるかどうかをテストしていました。(Python では、変更可能なオブジェクトをセットまたは辞書 (マップ) に配置することはできません)