2013-03-19 17 views
3

如何讓樹狀按字母順序排序? 並刪除重複..它已經讓我堅持了一天。也許我需要得到一些睡眠..Treeset按字母順序排序

public static void main(String[] args) { 
     String fileName = args[0]; 
     String words; 
     Scanner s = null; 
     Iterator itr; 

     try { 
      s = new Scanner(new BufferedReader(new FileReader(fileName))); 
       while (s.hasNext()) { 
        words = s.next(); 

        TreeSet<String> ts = new TreeSet<String>(); 
        ts.add(words); 

        System.out.println(ts); 
       } 
      } catch (FileNotFoundException fnfe) { 
      System.exit(0); 
     } finally { 
       if (s != null) { 
        s.close(); 
       } 
      } 
    }   
+4

你有重複的東西嗎?在一個集合? – 2013-03-19 19:59:18

+3

你正在爲每個單詞製作一個新的TreeSet ... – n00begon 2013-03-19 19:59:51

+0

@KatjaChristiansen好吧,它*是*可能的 - 設計得很糟糕的'hashCode()'或'equals()' - 但我想它更加棘手'String' class :) – 2013-03-19 20:02:06

回答

6

TreeSet持有一個樹形結構,它是自然順序自動排序的集合。每個實現Comparable接口的類將被排序。 String類已經實現了Comparable接口,因此您不必進行任何分類,只需將其添加到TreeSet即可。

如果實現了hashCode()equals()方法,它們應該如何設置不能包含重複項。

編輯:TreeSet<String> ts = new TreeSet<String>();位於while()循環範圍。你正在初始化它的每一個循環,並丟棄前一個數據。聲明它在循環之外並且不要使用Collection.sort()

+2

對於'String','hashCode'和'equals'已經實現(正確)給你... – 2013-03-19 20:06:26

+1

當然,對於99.999%的情況,但仍然可能發生兩個不同的字符串有散列衝突(相同的散列)。 – emd 2013-03-19 20:11:11

+2

@emd - 散列衝突的可能性是'equals'方法也需要實現的原因。 – Perception 2013-03-19 20:14:44