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)
示例
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]
廣告
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP