从许多HashMap对象创建SortedSet的最佳方法

时间:2012-05-14 10:54:27

标签: java sorting collections hashmap sortedset

我有许多HashMap个数据结构,其中包含数百个Comparable个对象(比如类型为MyClass),需要将所有值(而不是键)放在一个数据结构,然后对其进行排序。

由于MyClass个对象的数量和到达率,此过程(每毫秒至少执行一次)需要尽可能高效。

一种方法是使用SortedSet,大致如下:

HashMap<String, MyClass>[] allMaps = ... // All the HashMaps

SortedSet<MyClass> set = new TreeSet<MyClass>();

Collection<MyClass> c;

for (HashMap<String, MyClass> m:allMaps)
{
    c = m.values();
    set.addAll(c);
}

将排序后的集合传递给set.addAll()可能会更快,这可能会在每次插入时或每次插入后重新排序TreeSet。但是,要执行此操作,需要将List传递给Collections.sort(),这意味着必须进行从CollectionList的转换,即必须进行另一次性能影响。坚持下去。

此外,可能还有另一种更有效的方法来实现同一目标。

评论

1 个答案:

答案 0 :(得分:1)

我认为答案有点取决于MyClass数据如何变化。例如,如果每个时间帧中有一些新值,那么您可能需要考虑保留最后返回的有序集和前一个键的副本,以便在下次运行时,您可以执行更改的增量(即在地图中查找新密钥并手动将它们插入上次返回的有序集合中)。

如果可能会从地图中删除MyClass对象,则此算法会有所不同。但一般的想法是让它更快,你必须找到一种方法来执行增量更改,而不是每次都重新处理整个集合。