Ответ
List и Set — это две основные коллекции в Dart с фундаментальными различиями в семантике и производительности.
List (Список/Массив)
- Упорядоченная коллекция.
- Допускает дубликаты элементов.
- Доступ к элементам по индексу.
List<String> cities = ['Москва', 'Санкт-Петербург', 'Москва']; print(cities); // [Москва, Санкт-Петербург, Москва] print(cities[1]); // Санкт-Петербург
Set (Множество)
- Неупорядоченная коллекция (порядок не гарантируется, если это не
LinkedHashSet). - Содержит только уникальные элементы. Дубликаты автоматически игнорируются.
- Быстрая проверка на наличие элемента (
contains).Set<String> uniqueCities = {'Москва', 'Санкт-Петербург', 'Москва'}; print(uniqueCities); // {Москва, Санкт-Петербург} print(uniqueCities.contains('Москва')); // true (выполняется быстро)
| Ключевые отличия и выбор: | Критерий | List | Set |
|---|---|---|---|
| Порядок | Сохраняется | Не гарантирован | |
| Дубликаты | Разрешены | Запрещены | |
Производительность contains() |
O(n) (медленно) | O(1) (быстро) | |
| Типичный use-case | Лента сообщений, элементы UI в определённом порядке, очередь задач. | Хранение уникальных ID, тегов, проверка принадлежности (например, список избранного). |
Пример в контексте Flutter:
// List: для отображения упорядоченного списка виджетов
List<Widget> widgetList = [Text('A'), Text('B'), Text('A')];
// Set: для хранения выбранных уникальных элементов в фильтре
Set<int> selectedFilterIds = {1, 5, 1}; // Фактически {1, 5}
if (selectedFilterIds.contains(5)) { ... } // Быстрая проверка