Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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如何实现HashMap数据结构?_Scala_Data Structures_Functional Programming_Hashmap - Fatal编程技术网

Scala如何实现HashMap数据结构?

Scala如何实现HashMap数据结构?,scala,data-structures,functional-programming,hashmap,Scala,Data Structures,Functional Programming,Hashmap,我最近迷上了函数式编程,我真的很喜欢Scala。出于好奇,我决定开始实现自己的数据结构。我从一个SingleLinkedList开始,在这里我区分了两个case类:caseEmpty和caseCons(head,tail)。我想知道是否有人能告诉我如何实现HashMap?提前感谢您的帮助:)哈希映射[K,V]应该包含哈希向量,类似于向量[List[V]]。和hash函数。试着实现这个特性 提示:尝试使用不可变的数据结构执行此操作 数据结构说明: HashMap类似于HashTable,它包含一个

我最近迷上了函数式编程,我真的很喜欢Scala。出于好奇,我决定开始实现自己的数据结构。我从一个SingleLinkedList开始,在这里我区分了两个case类:case
Empty
和case
Cons(head,tail)
。我想知道是否有人能告诉我如何实现HashMap?提前感谢您的帮助:)

哈希映射[K,V]
应该包含哈希向量,类似于
向量[List[V]]
。和
hash
函数。试着实现这个特性

提示:尝试使用不可变的数据结构执行此操作

数据结构说明: HashMap类似于HashTable,它包含一个数组,该数组链接到具有相同
hash(key)
值的chains元素

您还可以定义一些有用的构造函数:

object HashMap {
  def empty[K, V]: HashMap[K, V] = ???

  def fromSeqPairs[K, V](seq: Seq[(K, V)]): HashMap[K, V] = ???

  def filled[K, V](seq: Seq[K], defaultValue: V): HashMap[K, V] = ???
}

HashMap[K,V]
应该包含hash向量,类似于
vector[List[V]]
。和
hash
函数。试着实现这个特性

提示:尝试使用不可变的数据结构执行此操作

数据结构说明: HashMap类似于HashTable,它包含一个数组,该数组链接到具有相同
hash(key)
值的chains元素

您还可以定义一些有用的构造函数:

object HashMap {
  def empty[K, V]: HashMap[K, V] = ???

  def fromSeqPairs[K, V](seq: Seq[(K, V)]): HashMap[K, V] = ???

  def filled[K, V](seq: Seq[K], defaultValue: V): HashMap[K, V] = ???
}

我想你是说不可变的HashMap?然后你可以看看

在HashMap中,您假设如果对象相等,则它们具有相同的哈希值,如果它们具有不同的哈希值,则它们不相等。因此,您可以做的是:

  • 创建一个trie,其中从根到叶的路径是密钥的散列
  • 在节点中,有例如对列表(键->值)
  • 然后查找键值对就是遍历trie,然后遍历列表
如果散列是好的,那么(通常)您应该有非常多的视图冲突,因此您在trie部分花费的时间比在list部分花费的时间要多

在FP中使用它是指在复制/添加/删除值时使用技巧来允许重用trie的部分,从而保持相对便宜的价格。如何有效地做到这一点是一个较长的主题,但您可以查看以下文章:


或者只是看看。它甚至引用了。

我想你指的是不可变的HashMap?然后你可以看看

在HashMap中,您假设如果对象相等,则它们具有相同的哈希值,如果它们具有不同的哈希值,则它们不相等。因此,您可以做的是:

  • 创建一个trie,其中从根到叶的路径是密钥的散列
  • 在节点中,有例如对列表(键->值)
  • 然后查找键值对就是遍历trie,然后遍历列表
如果散列是好的,那么(通常)您应该有非常多的视图冲突,因此您在trie部分花费的时间比在list部分花费的时间要多

在FP中使用它是指在复制/添加/删除值时使用技巧来允许重用trie的部分,从而保持相对便宜的价格。如何有效地做到这一点是一个较长的主题,但您可以查看以下文章:


或者只是看看。它甚至引用了。

trie的一个好特性是,您可以使用它创建各种持久性数据结构,它们类似于命令式数据结构,尽管它们是不可变的。是的,它们不仅用于映射,还用于不可变向量。trie的优良特性是,您可以使用它创建各种持久数据结构,它们类似于命令式数据结构,尽管它们是不可变的。是的,它们不仅用于映射,也用于不可变向量。我碰巧有一个关于persisten数据结构的实现(主要是Clojure,但是Scala从那里的思想中复制了很多)。我碰巧有一个关于persisten数据结构的实现(主要是Clojure,但是Scala从那里的思想中复制了很多)。