为了按照我们已知的方式在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]