按时间倒序对一个唯一的字符串列表进行排序



我想按逆时间顺序对一个唯一的字符串列表进行排序使用哪个集合以及实现它的最佳方式。

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

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

由于您指定了以排序的方式想要唯一项,因此在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>对象中,就应该设置好了。

最新更新