我有许多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()
,这意味着必须进行从Collection
到List
的转换,即必须进行另一次性能影响。坚持下去。
此外,可能还有另一种更有效的方法来实现同一目标。
评论
答案 0 :(得分:1)
我认为答案有点取决于MyClass数据如何变化。例如,如果每个时间帧中有一些新值,那么您可能需要考虑保留最后返回的有序集和前一个键的副本,以便在下次运行时,您可以执行更改的增量(即在地图中查找新密钥并手动将它们插入上次返回的有序集合中)。
如果可能会从地图中删除MyClass对象,则此算法会有所不同。但一般的想法是让它更快,你必须找到一种方法来执行增量更改,而不是每次都重新处理整个集合。