Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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_Map_Persistent_Linkedhashmap_Insertion Order - Fatal编程技术网

支持快速查找和插入顺序的持久数据结构(在Scala中)?

支持快速查找和插入顺序的持久数据结构(在Scala中)?,scala,map,persistent,linkedhashmap,insertion-order,Scala,Map,Persistent,Linkedhashmap,Insertion Order,当我使用映射时,我倾向于选择那些元素可以按插入顺序迭代的映射。这让他们感觉更确定,更容易测试。出于这个原因和其他原因,我一直对Java中的LinkedHashMap着迷 在FP世界中,对于查找,优先选择树而不是地图。诚然,在Scala中有一个名为ListMap的LinkedHashMap的不可变版本,但它不使用散列,对于大多数实际应用来说速度太慢 如果我想获得不变性的优势,如何满足我对既能记住插入顺序又能快速查找的数据结构的渴望?有人在某个地方的库中写了什么吗?有限映射(哈希表、字典)通常不能保

当我使用映射时,我倾向于选择那些元素可以按插入顺序迭代的映射。这让他们感觉更确定,更容易测试。出于这个原因和其他原因,我一直对Java中的LinkedHashMap着迷

在FP世界中,对于查找,优先选择树而不是地图。诚然,在Scala中有一个名为ListMap的LinkedHashMap的不可变版本,但它不使用散列,对于大多数实际应用来说速度太慢

如果我想获得不变性的优势,如何满足我对既能记住插入顺序又能快速查找的数据结构的渴望?有人在某个地方的库中写了什么吗?

有限映射(哈希表、字典)通常不能保证正确的迭代顺序。对于大多数库和语言来说,这是一件常见的事情。所以,如果您想遍历它,我建议您将键(指针)存储到支持插入顺序迭代的其他数据结构中。因此,您可以遍历helper数组并查找finit map以获取有关条目的详细信息


关于有限映射。Scala(就像闭包一样)使用HAMT()数据结构实现哈希表。而且真的很快。还有s(由C.Okasaki编写),可以用作有限图。你对树木的看法是对的。Haskell使用红黑树作为有限映射实现。它也很快,而且几乎是
O(1)
。例如,为了在JVM平台中存储此类映射中所有可能的密钥,您需要分配2147483647个节点。因此,要查找整个树,只需
log_2(2147483647)=31步。没那么慢吧

我想这是最接近我的了。也许我对一个数据结构要求太高了。我刚刚被Java的LinkedHashMap给宠坏了。最后,对于我的特殊问题,我意识到我不需要太多的查找,并将结构简化为一个成对的列表。