Java 中对 String 和 StringBuffer 集合进行排序


为了在 Java 中进行排序,我们知道可以使用 Comparable 或 Comparator 接口,在其中我们还可以定义我们自定义的排序逻辑。其中一种排序方法是将实体添加到 TreeSet 或 TreeMap 中,这将对条目进行排序,因为它们内部也使用 Comparable 接口。

现在,Java 中的 String 类内部实现了 Comparable 接口,因此每当我们将字符串添加到 TreeSet 或 Map 时,它都会使用 String 类的 Comparable 逻辑并对输入的条目字符串进行排序。但是 StringBuffer 没有实现 Comparable 接口,因此当我们尝试将 StringBuffer 条目添加到 TreeSet 或 Map 时,它会抛出一个异常,因为它找不到 Comparable 接口的实现。

为了对 StringBuffer 进行排序,我们可以实现 Comparator 接口并定义自己的自定义排序逻辑,或者我们可以先将 StringBuffer 转换为 String,然后将 String 条目添加到 TreeSet 或 Map 集合中。

示例

实时演示

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)

Learn Java in-depth with real-world projects through our Java certification course. Enroll and become a certified expert to boost your career.

示例

实时演示

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]

更新于: 2019-07-30

711 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告