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]

更新於: 2019-07-30

711 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.