我可以使用哪种数据结构按多个条件对对象进行排序/比较?

时间:2011-09-07 05:57:13

标签: java collections

我们有一个对象集合,每个对象都有一个整数ID和一个时间戳。我们希望能够搜索重复项并根据ID更新集合。

但是我们也希望能够对集合进行“切片”,例如在给定时间后找到带有时间戳的每个对象。所以我们也想对时间戳进行排序。

我们正在使用TreeMap,它最初似乎给了我们想要的东西。但是因为TreeMap(以及从SortedSet派生的所有内容)仅使用compareTo()并忽略equals()方法,我们发现基于ID搜索重复项不起作用。我们的compareTo()方法尝试允许两种条件(搜索ID或时间戳),但最终是大而丑,并且实际上不起作用。 :)

这个集合可能会变得非常大,所以我们当然希望尽可能快地搜索/排序/插入。

1 个答案:

答案 0 :(得分:1)

您可以使用两个TreeMaps,一个将ID映射到对象,另一个将时间戳映射到对象。

然后你可以根据它的id或它的时间戳轻松找到一个对象。您还可以获取一组具有特定范围内时间戳的对象(如您所知)。

显然,缺点是必须从两个集合中删除对象。然而,这应该不是那么糟糕,因为每个对象都知道它的id和它的时间戳,所以如果你想通过时间戳删除,你获得免费的id,你只需要再做一次日志操作。

如果你愿意,可以将它们包装在你自己的系列中。