Почему метод 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 Метод создает новую коллекцию наборов из некоторой существующей коллекции. Он использует реализацию набора по умолчанию для этой новой коллекции наборов. Реализация набора по умолчанию основана на хеш-таблице. В хеш-таблице порядок элементов не определен.

Другие вопросы по тегам