Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中指定哈希映射的大小_Scala_Hashmap - Fatal编程技术网

在Scala中指定哈希映射的大小

在Scala中指定哈希映射的大小,scala,hashmap,Scala,Hashmap,我使用Scala的可变HashMap以增量方式将数百万个键值对相加。这些哈希映射的大小调整现在是我程序中最慢的部分。我如何告诉Scala从一开始就创建一个非常大的HashMap,这样它(几乎)就不需要调整大小 如果有任何想法能够提出另一个适合我需要的Scala/Java集合,我将不胜感激。添加一个新的键值对和检索一个给定键值的值都应该可以在大约恒定的时间内完成。一种可能的方法: import scala.collection.mutable.{HashTable, DefaultEntry}

我使用Scala的可变HashMap以增量方式将数百万个键值对相加。这些哈希映射的大小调整现在是我程序中最慢的部分。我如何告诉Scala从一开始就创建一个非常大的HashMap,这样它(几乎)就不需要调整大小

如果有任何想法能够提出另一个适合我需要的Scala/Java集合,我将不胜感激。添加一个新的键值对和检索一个给定键值的值都应该可以在大约恒定的时间内完成。

一种可能的方法:

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)

支持
initialSize

java.util.HashMap
有一个构造函数,允许您指定初始大小。与Yuriy的答案不同,没有理由编写不需要的代码


jifeng.yin的回答也是可以接受的,尽管由于
OpenHashMap
使用了一种未指定的形式,您应该为您的用例进行基准测试,看看从链接到开放寻址的变化是如何起作用的,如果可以的话。

谢谢!第二个解决方案对我来说似乎更好。有什么理由选择第一种解决方案而不是第二种解决方案吗?为什么不直接使用
java.util.HashMap
,而不绕圈子呢?