2013-05-07 68 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)正常工作。