我正在使用Scala的可变HashMap逐步累加数百万个键值对。调整这些HashMaps的大小现在是我程序中最慢的部分。我如何告诉Scala从一开始就创建一个非常大的HashMap,以便它(几乎)永远不需要调整大小?
我也很感激提出另一个符合我需求的Scala / Java集合的想法。添加新的键值对并检索给定键的值应该都能在大致恒定的时间内完成。
答案 0 :(得分:10)
可能的方法之一:
import scala.collection.mutable.{HashTable, DefaultEntry}
trait BigHashTable[A, B] extends HashTable[A, DefaultEntry[A, B]] {
override def initialSize: Int = 1024 // 16 - by default
}
val x = new HashMap[Int, String] with BigHashTable[Int, String]
另一个:
class MyHashMap[A, B](initSize : Int) extends HashMap[A, B] {
override def initialSize: Int = initSize // 16 - by default
}
val x = new MyHashMap[Int, String](1024)
答案 1 :(得分:2)
scala.collection.mutable.OpenHashMap支持initialSize
答案 2 :(得分:-1)
java.util.HashMap
的构造函数可让您指定初始大小。与Yuriy的答案不同,没有理由编写不需要的代码。
jifeng.yin的答案也是可以接受的,尽管由于OpenHashMap
使用Open Addressing的未指定形式,所以您应该对用例进行基准测试,并查看从链接到开放寻址的变化如何重要(如果有)全部。