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]
广告