首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mutable.ListMap的奇性态

mutable.ListMap的奇性态
EN

Stack Overflow用户
提问于 2016-01-17 07:23:23
回答 3查看 112关注 0票数 0

我正在尝试使用ListMap中的值过滤List。但是在输出mutable.ListMap中没有保持顺序。这是一个简化的代码。由于有一些约束和验证检查要做,所以我不能用filter来完成。

这是我的密码

代码语言:javascript
复制
val inMap = scala.collection.immutable.ListMap((1,5),(2,4),(3,5),(7,6))
val alist= List(1,2,3)
val mutableTempMap = scala.collection.mutable.ListMap.empty[Int, Int]

for (jkey <- alist) {
  inMap.get(jkey) match {
    case Some(y) => mutableTempMap(jkey) = y
    case None    =>
  }
}

mutableTempMap

输出:

代码语言:javascript
复制
scala.collection.mutable.ListMap[Int,Int] = Map(3 -> 5, 1 -> 5, 2 -> 4)

预期输出

代码语言:javascript
复制
scala.collection.mutable.ListMap[Int,Int] = Map(1 -> 5, 2 -> 4, 3 -> 5)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-17 11:50:46

mutable.ListMap保持顺序的假设是错误的。合同里没有。最好的选择是使用LinkedHashMap

还请参阅:

Scala Map implementation keeping entries in insertion order?

票数 0
EN

Stack Overflow用户

发布于 2016-01-17 08:11:47

如果使用不可变的ListMap,则会维护订单。易变性(颤抖)可以通过var来实现。

代码语言:javascript
复制
var ilm = collection.immutable.ListMap.empty[Int,Int]
ilm = ilm + (1 -> 5)
ilm = ilm + (2 -> 4)
ilm = ilm + (3 -> 5)
// ilm: immutable.ListMap[Int,Int] = Map(1 -> 5, 2 -> 4, 3 -> 5)
票数 1
EN

Stack Overflow用户

发布于 2016-01-17 09:45:37

首先,由于ListMap是幕后的单链接列表,所以对于可变版本,您绝对没有获得任何性能,而var是不可变的。

除此之外,它还有一个奇怪的插入模式,所以让我们来测试一下:

代码语言:javascript
复制
val m = collection.mutable.ListMap.empty[Int,Int]
(1 to 10).foreach {i =>
   m(i) = i
   println(m)
}

产生这个输出。注意每次插入后,尾是如何反转的,这就是您的答案。

代码语言:javascript
复制
Map(1 -> 1)
Map(2 -> 2, 1 -> 1)
Map(3 -> 3, 1 -> 1, 2 -> 2)
Map(4 -> 4, 2 -> 2, 1 -> 1, 3 -> 3)
Map(5 -> 5, 3 -> 3, 1 -> 1, 2 -> 2, 4 -> 4)
Map(6 -> 6, 4 -> 4, 2 -> 2, 1 -> 1, 3 -> 3, 5 -> 5)
Map(7 -> 7, 5 -> 5, 3 -> 3, 1 -> 1, 2 -> 2, 4 -> 4, 6 -> 6)
Map(8 -> 8, 6 -> 6, 4 -> 4, 2 -> 2, 1 -> 1, 3 -> 3, 5 -> 5, 7 -> 7)
Map(9 -> 9, 7 -> 7, 5 -> 5, 3 -> 3, 1 -> 1, 2 -> 2, 4 -> 4, 6 -> 6, 8 -> 8)
Map(10 -> 10, 8 -> 8, 6 -> 6, 4 -> 4, 2 -> 2, 1 -> 1, 3 -> 3, 5 -> 5, 7 -> 7, 9 -> 9)

我可能会认为这是一个错误,尽管事实上地图没有排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34836107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档