Почему метод toSet смешивает порядок элементов в ListBuffer?
В скале, почему toSet()
метод перепутать порядок элементов в коллекции (ListBuffer
)?
Какую коллекцию я могу использовать для обеспечения уникальности каждого элемента и сохранения их первоначального порядка?
1 ответ
Решение
Поскольку заданная абстракция, будучи подклассом проходимого, не имеет гарантий относительно порядка элементов, содержащихся в:
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
Метод создает новую коллекцию наборов из некоторой существующей коллекции. Он использует реализацию набора по умолчанию для этой новой коллекции наборов. Реализация набора по умолчанию основана на хеш-таблице. В хеш-таблице порядок элементов не определен.