1
class Obj{
    int x;
    int y;
    Date z;

    public int compareTo(Obj other) {
        if(this.z.getTime() > other.getZ().getTime())
            return 1;
        else if(this.z.getTime() < other.getZ().getTime())
            return -1;
        else 
            return 0;
    }

    boolean equals(Obj other) {
        if(x== other.x && y == other.y) 
            return true; 
        else 
            return false;
    }
}

现在我有一个list<Obj>,我必须删除重复项,并且只有在有多个具有相同 ID 的对象时才选择最新的(最新的 z)。

sortedSet = new TreeSet(objList);
reversedSortedList = new ArrayList(sortedSet); //This will not be needed if we reverse the comparator logic. However it is not good. 
uniqueSet = new HashSet(reverseSortedList);
return uniqueSet;

这是做事的好方法吗。或者有一种更清洁、更好的做事方式。对我来说,列表中的元素数量也在 1000-10000 之间

谢谢

4

2 回答 2

0

您可以编写一个单独的 Comparator 来比较您的对象,该对象将能够反向排序(与您实现的逻辑相反)而不是在我们的对象中实现 compareTo 方法(虽然我可以看到您的类没有实现 Comparable 接口)。

这样,您将能够直接获得反向排序的 Set,并且您可以随时轻松更改逻辑,或者可以在不同的地方使用许多不同的比较器。

对于 1000-10000,使用 TreeSet 是 Compartors 的一个不错的选择。

于 2013-11-05T09:06:26.620 回答
0

您的比较器可以优化为:

public int compareTo(Obj other) {
        return (int)(this.z.getTime() - other.getZ().getTime());
}
于 2013-11-05T09:13:31.830 回答