为了按照我们已知的方式在Java中进行排序,我们可以使用Comparable或Comparator接口,在其中还可以定义自定义逻辑来进行排序。一种排序方法是在TreeSet或TreeMap中添加实体,以对条目进行排序在内部,他们还使用类似的接口。
现在,Java中的String类在内部实现了可比较的接口,因此每当我们向树集添加字符串或映射树时,它都使用可比较的字符串类逻辑并对输入项进行排序,但是String缓冲区没有可比较的接口实现,因此当我们尝试在树集或映射中添加字符串缓冲区条目,因为它找不到可比较的接口的实现,因此将引发异常。
为了对字符串缓冲区进行排序,我们可以实现比较器接口并定义自己的自定义排序逻辑,也可以首先将字符串缓冲区更改为字符串,然后将字符串条目添加到树集或映射集合中。
import java.util.TreeSet;
public class StringBufferSort {
public static void main(String[] args) {
TreeSet<String> tset = new TreeSet<>();
tset.add("Brown");
tset.add("Yellow");
tset.add("Red");
tset.add("Grey");
tset.add("White");
System.out.println(tset);
TreeSet<StringBuffer> tset1 = new TreeSet<>();
tset1.add(new StringBuffer("Brown"));
tset1.add(new StringBuffer("Yellow"));
tset1.add(new StringBuffer("Red"));
tset1.add(new StringBuffer("Grey"));
tset1.add(new StringBuffer("White"));
System.out.println(tset1);
}
}输出结果
[Brown, Grey, Red, White, Yellow] Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuffer cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1188) at java.util.TreeMap.put(TreeMap.java:531) at java.util.TreeSet.add(TreeSet.java:255) at StringBufferSort.main(StringBufferSort.java:18)
import java.util.Comparator;
import java.util.TreeSet;
public class StringBufferSort implements Comparator<StringBuffer>{
@Override
public int compare(StringBuffer strB1, StringBuffer strB2) {
return strB1.toString().compareTo(strB2.toString());
}
public static void main(String[] args) {
TreeSet<String> tset = new TreeSet<>();
tset.add("Brown");
tset.add("Yellow");
tset.add("Red");
tset.add("Grey");
tset.add("White");
System.out.println(tset);
TreeSet<StringBuffer> tset1 = new TreeSet<>(new StringBufferSort());
tset1.add(new StringBuffer("Brown"));
tset1.add(new StringBuffer("Yellow"));
tset1.add(new StringBuffer("Red"));
tset1.add(new StringBuffer("Grey"));
tset1.add(new StringBuffer("White"));
System.out.println(tset1);
}
}输出结果
[Brown, Grey, Red, White, Yellow] [Brown, Grey, Red, White, Yellow]