2012-03-28 59 views
0

我想按逆時間順序對字符串的唯一列表進行排序。 要使用哪一個集合最佳方式來實現它。按照反向時間順序對字符串的唯一列表進行排序

我的溶液: 採取在列表中的字符串,並進行了比較 通過列表,這個比較實現類的集合排序操作

public class SortStringsReverse { 

    public static void main(String[] args) { 
     List l = new ArrayList(); 
     l.add("ABC"); 
     l.add("ZXY"); 

     StringComparator comparatorObj = new StringComparator(); 
     Collections.sort(l, comparatorObj); 
     for(Object s: l){ 
      System.out.println("values are " + (String)s); 
     } 
    } 
} 

class StringComparator implements Comparator{ 

    public int compare(Object arg0, Object arg1) { 
     return ((String)arg1).compareTo((String)arg0);//return ((String)arg0).compareTo((String)arg1); 
    } 

} 
+0

你是什麼意思的「反向時間順序」?除非你有一些時間格式內的字符串,它很難理解你將如何做比較。你的意思是「反向詞彙順序」? – 2012-03-28 06:49:59

+1

另外,「最好的方式」是什麼意思?最有效的性能/內存或最簡單的代碼? – 2012-03-28 06:50:42

+0

您將Java 1.4與1.5混合使用。使用'List ','StringComparator實現Comparator ','public int compare(String arg0,String arg1)'。編譯器會爲你投下 – 2012-03-28 07:00:57

回答

1

既然你指定你想要的對象獨特項目在排序方式,在Java中最好的工具是TreeSet(儘管任何SortedSet實現將做)。通常,TreeSet類按升序存儲項目,但幸運的是,我們可以使用自定義的Comparator對象作爲參數來更改該項目。

我被你想反向字母順序排序字符串,因爲按年代順序是沒有意義的你的問題假設,事實上你可以自己Comparator必要時實施。現在,您提供的Comparator將按照原始Java方式對字符串進行排序:比較字母表中更靠後的字符串,比較字符串「更接近」字母開頭的位置(例如"bananas".compareTo("zebra")將返回正數結果,"zebra".compareTo("bananas")負數。一個要顛倒字母順序,我們可以使用這種二元和反向比較的順序;比較第二個參數對第一,因爲這樣的:

class StringComparator implements Comparator<String>{ 

    public int compare(String arg0, String arg1) { 
     return arg1.compareTo(arg0); 
    } 

} 

現在通過這個類的一個對象插入到TreeSet<String>對象,你應該設置。

+0

感謝回覆並假設正確(因爲我使用了一些錯誤的詞)..您提到的代碼與我的相同(除了泛型和treeSet),儀式? – 2012-03-30 05:06:59

+0

代碼基本相同,但您的問題不需要複雜的解決方案。您應該使用'TreeSet'而不是'List',因爲'TreeSet'將保證兩件事:首先,它中的所有項目都是唯一的;其次,所有的項目將被排序。這是一個比'List'好得多的選項,這兩個條件都不能保證。我在我的示例'Comparator'中使用了泛型,因爲它使代碼更清晰,並且不需要投射。還有其他問題嗎? – fruchtose 2012-03-30 23:37:23

相關問題