按反向时间顺序排序一个唯一的字符串列表

时间:2012-03-28 06:46:36

标签: java core

我想按反向时间顺序排序一个唯一的字符串列表。 要使用哪个集合,以及最佳方式来实现它。

我的解决方案: 取列表中的字符串,并制作一个比较器    将列表和此比较器实现的类的对象传递给集合排序操作

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);
    }

}

1 个答案:

答案 0 :(得分:1)

由于您指定了排序方式的唯一项目,因此在Java中,最好的工具是TreeSet(尽管任何{{1}实现会这样做)。通常,SortedSet类按升序存储项目,但幸运的是我们可以使用自定义TreeSet对象作为参数来更改它。

我假设您希望字符串按反向字母顺序排序,因为时间顺序在这里没有意义,但实际上您可以根据需要实现自己的Comparator。现在,您提供的Comparator将根据原始Java方式对字符串进行排序:字母表中较远的字符串将被比较为字符串“更接近”字母表的开头(例如Comparator将返回一个正结果,"bananas".compareTo("zebra")为负数。为了颠倒字母顺序,我们可以使用这种二元性并反转比较顺序;将第二个参数与第一个参数进行比较,如下:

"zebra".compareTo("bananas")

现在将该类的对象传递到class StringComparator implements Comparator<String>{ public int compare(String arg0, String arg1) { return arg1.compareTo(arg0); } } 对象中,然后设置。