簡體   English   中英

如何對LinkedList <String>進行排序?

[英]How to sort LinkedList<String>?

我需要按字符串的長度對LinkedList的字符串進行排序,但是希望保持相同長度字符串的順序(不按字典順序排序)。

樣本輸入:

this
is
just
a
test

樣本輸出:

a
is
this
just
test

我試圖用Comparable<LinkedList<String>>compareTo方法做到這一點,但我沒有得到正確的輸出(我仍然按字典順序對其進行排序)

public class Q3_sorting implements Comparable<LinkedList<String>> {
    Scanner keyboardScanner = null;
    LinkedList<String> fileList = new LinkedList<String>();

// [...]這里有一些代碼

public int compareTo(LinkedList<String> o) {
        // TODO Auto-generated method stub
        o = fileList;

        for (int i = 0; i < fileList.size() -1; i++) {
            if (fileList.get(i).length() == o.get(i+1).length()) {
                return 0;
            }
            if (fileList.get(i).length() > o.get(i+1).length()) {
                return -1;
            }
            if (fileList.get(i).length() < o.get(i+1).length()) {
                return 1;
            }

        }

然后我用
Q3_sorting sort = new Q3_sorting(args);
Collections.sort(sort.fileList); 在我的主要方法。 然后我打印出清單......

但我得到這個作為輸出:

a
is
just
test
this

我該如何糾正這個問題?

你應該創建一個比較器:

public class Q3_sorting implements Comparator<String> {
public int compare(String a, String b) {
 return a.length() - b.length();
}

然后使用以下方法對其進行排序:

Collections.sort(list, new Q3_sorting());

請注意,您要做的是對List中的字符串進行排序。 通過實現List的比較器(或類似的,因為它在這里工作的目的相同),你告訴JVM的是你要比較不同的List。

你也可以通過在類中實現Comparable來實現你的目標,但是你不能只要String是最終的,所以你不能擴展。 因此除了實現比較器之外別無他法,這也比較簡單:)

使用Collections.sort(list, comparator)重載。 您需要Comparator<String>而不是Comparator<LinkedList<String>> 請注意,Collections.sort的javadoc保證了一個穩定的排序(保持相等字符串的順序,根據比較器等於平均值​​)。

您正在排序字符串,而不是字符串列表。 為此,您需要定義Comparator<String>以按長度比較兩個字符串,如下所示:

public class ByLength implements Comparator<String> {
  @Override
  public int compare(String a, String b) {
    return a.length() - b.length();
  }
}

然后,要對列表進行排序,您需要調用:

Collections.sort(sort.fileList, new ByLength());

另請注意,對LinkedList進行排序效率非常低,您應該使用ArrayList

遺憾的是,字符串沒有表示它們在鏈表中保持什么位置的屬性。 因此,您需要創建一個跟蹤該信息的自定義數據對象。 要么是為鏈表創建自己的自定義排序方法,要么調用它而不是Collections.sort()。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM