为什么“toSet”会这样?方法混淆了 ListBuffer 中元素的顺序?
在Scala中,为什么toset()
方法混合集合中的元素顺序(listBuffer
)?
我可以使用哪个集合来确保每个元素的独特性并保留其原始订单?
In scala, why does toSet()
method mix up the order of elements in a collection (ListBuffer
)?
Which collection can I use to both secure uniqueness of each element and keep their original order?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为 set 抽象,是 < 的子类a href="http://www.scala-lang.org/api/current/scala/collection/Traversable.html" rel="noreferrer">traversable,不保证其中保存的元素的顺序:
更准确地说明元素为何会出现'mangled':
toSet
方法从某些现有集合构造一个新的 set 集合。它使用这个新集合集合的默认集合实现。默认集实现基于哈希表。在哈希表中,元素的顺序是未定义的。Because the set abstraction, being a subclass of the traversable, has no guarantees about the order of elements held within:
More precisely about why the elements get 'mangled': the
toSet
method constructs a new set collection out of some existing collection. It uses the default set implementation for this new set collection. The default set implementation is based on a hash table. In a hash table, the order of elements is undefined.