Java中对String和StringBuffer的排序集合

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