在scala中,为什么toSet()
方法会混淆集合中元素的顺序(ListBuffer
)?
我可以使用哪个集合来确保每个元素的唯一性并保持其原始顺序?
在scala中,为什么toSet()
方法会混淆集合中元素的顺序(ListBuffer
)?
我可以使用哪个集合来确保每个元素的唯一性并保持其原始顺序?
因为集合抽象是traversable的子类,它不能保证其中包含的元素的顺序:
A traversable class might or might not have two properties: strictness and orderedness. Neither is represented as a type.
...
If the class is not ordered, foreach can visit elements in different orders for different runs (but it will keep the same order in the same run).'
更准确地说,为什么元素会被“损坏”:该toSet
方法从某个现有集合中构造一个新集合。它使用这个新集合的默认集合实现。默认集实现基于哈希表。在哈希表中,元素的顺序是未定义的。