3

在scala中,为什么toSet()方法会混淆集合中元素的顺序(ListBuffer)?

我可以使用哪个集合来确保每个元素的唯一性并保持其原始顺序?

4

1 回答 1

12

因为集合抽象是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方法从某个现有集合中构造一个新集合。它使用这个新集合的默认集合实现。默认集实现​​基于哈希表。在哈希表中,元素的顺序是未定义的。

于 2011-09-19T19:21:35.110 回答