【问题标题】:Speeding Up sequential Puts in Java TreeMap加快 Java TreeMap 中的顺序放置
【发布时间】:2016-01-16 21:34:50
【问题描述】:

在我目前正在开发的一个应用程序中,最耗时的功能之一是 TreeMap 中的 put() 操作(大约 30% 的运行时间)。

这些对put() 的调用通常是从另一个函数按顺序调用的,因此put() 函数调用将使用有序键。这当然会导致 RB-Tree 中的大量重新平衡,这有助于运行时。

有什么(简单的)方法可以加速我的应用程序吗?

【问题讨论】:

  • 你必须使用TreeMap吗? HashMap 在许多情况下要快一个数量级,因为它的平均插入时间为 O(1)
  • 密钥类型是什么?
  • 是的,它必须是 TreeMap,尤其是 floor/ceilingEntry 和 floor/ceilingKey 很重要。键是长的
  • 如果您将盒装 Longs 存储在地图中,那么提高性能的最简单方法是更改​​为专门的集合。我没能找到一个库来实现专门用于原始类型的 TreeMap,但你自己的应该不会太难。
  • 是的,我已经搜索过了,但只找到了普通地图的原始实现(例如 Colt、Trove),而不是 SortedMaps。

标签: java performance treemap


【解决方案1】:

您的第一次优化尝试应该是切换到ConcurrentSkipListMap。虽然这可能没有什么区别,甚至可能会使事情变慢,但值得一试,因为它是唯一实现“SortedMap”的其他“地图”(可能是使用“树地图”的原因。

之后,您正在寻找一种特殊的“地图”自定义实现,它可以更快地添加已排序的新条目。

【讨论】:

  • 我刚刚尝试过,它导致运行时间增加了约 20%。现在将尝试寻找自定义实现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 2021-01-21
  • 1970-01-01
  • 1970-01-01
  • 2010-09-25
相关资源
最近更新 更多