2013-05-07 171 views
0

我有我自己的類wordsymbolSymbol是char的一些包裝。 WordArrayList<Symbol>。 我需要根據symbol的出現次數或發生次數相同 - 按字母順序排序ArrayList<Word>。 如何做到這一點?我想我需要覆蓋類的Word方法,然後使用Collections.sort。 但我不知道如何按字母順序比較兩個words(兩個陣列列表)。按字母順序比較字符的數組列表

這裏是symbol

public class Symbol implements Comparable<Symbol> { 
    private char symbol; 
    .... 

    @Override 
    public int compareTo(Symbol o) { 
     return Character.valueOf(symbol).compareTo(Character.valueOf(o.getSymbol())); 
    } 
} 

這裏的一部分是word類的部分

public class Word implements Comparable<Word> { 

    private ArrayList<Symbol> word; 
    private Symbol comparable_symbol; 

    public int count(){ //number of occurrences 
     int count = 0; 
     for(Symbol s:word){ 
      if (s == comparable_symbol) count++; 
     } 
     return count; 
    } 

    @Override 
    public int compareTo(Word o) { 
     int left = this.count(); 
     int right = o.count(); 
     if (left == right){ 
      //compare alphabetically 
     } 
     else return (left > right)?1:-1; 
    } 

} 

如何按字母順序比較兩個的ArrayList?

+2

只需比較每個字符值從左到右?如果一個單詞比之前的所有字符匹配時先於另一個單詞先行。當然,這將使用Unicode 16位代碼點作爲字母表,除非您進行其他更改... – 2013-05-07 22:17:48

+1

一個非常糟糕的竅門是使用StringBuilder重新生成一個String實例並比較這些字符串,但如果這是你可能會得到一個指定的作業:) – 2013-05-07 22:20:00

+0

哦!我懂了。謝謝! – lapots 2013-05-07 22:26:36

回答

0
if (word.contains(comparable_symbol)){ 
    // Add to a new list 
} 
if (newList.size() > 1){ 
    // Sort your list alphabetically 
} 

您還必須實現並重寫compareTo(Word o)才能使word.contains(comparable_symbol)正常工作。