Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 967новых вакансий за сутки·94 749вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 308
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 098
  • Облачные технологии14 051
  • QA вакансии3 444
  • Backend вакансии2 113
  • Инженер данных1 788
  • Продакт-менеджер1 248

Разработка

  • Android1 857
  • iOS1 692
  • Fullstack вакансии980
  • AI вакансии956
  • Frontend вакансии750
  • Mobile вакансии44

По стеку

  • Go8 640
  • Java6 540
  • Node.js2 016
  • .NET1 705
  • Kotlin1 619
  • Rust1 458
  • C#701
  • PHP681
  • C++564

DevOps и инфраструктура

  • Kubernetes7 740
  • DevOps вакансии6 045
  • Linux-инфраструктура5 481
  • Terraform / IaC4 255
  • CI/CD3 212
  • Мониторинг и Observability1 775
  • SRE565
  • Кибербезопасность445

Аналитика и данные

  • Data Scientist1 121
  • Бизнес-аналитик930
  • Аналитик данных838
  • Системный аналитик154

Другие направления

  • Проджект-менеджер605
  • UI/UX дизайн142
  • Ручное тестирование14

По регионам

  • Вакансии в США43 023
  • Вакансии в Европе23 282
  • Вакансии в Канаде4 294
  • Работа в России3 910

По формату

  • Удалённые вакансии72 436
  • Релокация в США45 435
  • Гибридная работа12 406
  • Офисная работа7 080

По уровню

  • Senior вакансии42 979
  • Middle вакансии21 322
  • Junior вакансии6 799

Сейчас нанимают

Все компании
  • Wise192 вакансии
  • Rakuten189 вакансий
  • ASML165 вакансий
  • Grab139 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме DartВсе вопросы
DartJuniorКодинг

В чём разница между List, Set и Map в Dart?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

List — упорядоченная последовательность с дубликатами и доступом по индексу; Set — уникальные элементы с быстрым contains; Map — пары ключ/значение с уникальными ключами и O(1) доступом.

List — упорядоченная последовательность

List<T> хранит элементы в порядке добавления, допускает дубликаты и обеспечивает доступ по индексу за O(1). Это ближайший аналог массива или ArrayList.

final List<String> langs = ['Dart', 'Kotlin', 'Swift', 'Dart'];
print(langs[0]);          // Dart
print(langs.length);      // 4  (дубликат сохранён)
langs.add('Go');
langs.remove('Kotlin');
langs.sort();
print(langs);             // [Dart, Dart, Go, Swift]

Два варианта создания: List.filled(n, value) — фиксированного размера, [] — growable (по умолчанию).

List, Set и Map в Dart

Dart предоставляет три основные коллекции из core-библиотеки, каждая со своей семантикой хранения и доступа.

Set — уникальные элементы без гарантии порядка

Set<T> гарантирует уникальность через хэш (реализация по умолчанию — LinkedHashSet, сохраняет порядок вставки). Проверка наличия элемента — O(1).

final Set<String> roles = {'admin', 'user', 'admin'};
print(roles);             // {admin, user}  — дубликат удалён
print(roles.contains('admin'));  // true

final a = {1, 2, 3};
final b = {2, 3, 4};
print(a.intersection(b)); // {2, 3}
print(a.union(b));        // {1, 2, 3, 4}
print(a.difference(b));   // {1}

Map — пары ключ-значение

Map<K, V> — ассоциативный массив. Ключи уникальны; по умолчанию используется LinkedHashMap, сохраняющий порядок вставки. Доступ за O(1).

final Map<String, int> scores = {'Alice': 95, 'Bob': 82};
scores['Carol'] = 91;
print(scores['Alice']);           // 95
print(scores['Unknown']);         // null
print(scores.containsKey('Bob')); // true

// Итерация
scores.forEach((name, score) {
  print('$name: $score');
});

// Безопасное обновление
scores.update('Bob', (v) => v + 5, ifAbsent: () => 0);

Сравнение по ключевым характеристикам

  • List: порядок гарантирован, дубликаты разрешены, доступ по индексу.
  • Set: только уникальные элементы, быстрая проверка contains, операции над множествами.
  • Map: поиск по ключу, уникальные ключи, значения могут повторяться.

const-коллекции

Все три типа поддерживают const — создание неизменяемых коллекций на этапе компиляции:

const list = [1, 2, 3];
const set  = {1, 2, 3};
const map  = {'a': 1};

Подводные камни

  • Пустой {} — это Map, а не Set. Dart выводит тип Map<dynamic, dynamic>, а не Set. Для пустого Set нужно явное <String>{} или Set<String>().
  • LinkedHashMap vs HashMap. Если порядок не важен и нужна максимальная скорость, явно используйте HashMap из dart:collection.
  • List фиксированного размера. List.filled(5, 0) бросает UnsupportedError на add(). Передайте growable: true если нужен рост.
  • Мутация во время итерации. Изменение List/Set внутри forEach или цикла for-in приводит к ConcurrentModificationError.
  • Equals/hashCode для Set и Map. Если используете собственный класс как ключ Map или элемент Set, необходимо переопределить == и hashCode, иначе сравнение идёт по идентичности объекта.
  • spread в Set с дубликатами не бросает исключение — дубликаты молча отбрасываются, что может маскировать логические ошибки.
  • Null-ключи и null-значения. Map допускает null в качестве ключа и значения; обращение map['key'] возвращает null как для отсутствующего ключа, так и для явно сохранённого null — используйте containsKey для разграничения.

Типичные ошибки

  • Сводить «List, Set и Map в Dart» к синтаксису и не объяснять sound type system.
  • Игнорировать жизненный цикл, основной поток или момент освобождения ресурсов в сценарии dart-20.
  • Выбирать API по привычке, не проверяя состояние, ошибки, доступность и платформенные ограничения.

Что проверяет интервьюер

  • Формулирует точную модель для «List, Set и Map в Dart» и подтверждает ее корректным примером.
  • Умеет связать ответ с event loop, тестированием и отладкой на устройстве.
  • Называет ограничения подхода dart-20, включая производительность, память и сопровождение.

Как вы знаете этот вопрос?

Проверить себя по теме Dart →

Источники

  • https://dart.dev/language/collections
←Предыдущий вопросЧто такое mixins в Dart и чем они отличаются от наследования?Следующий вопрос→Что такое generics в Dart и как их использовать?

Связанные темы

Dartimplementation-reasoningMobile-Engineering

Частые вопросы на собеседовании

  • В чём разница между var, dynamic и явными типами в Dart?
  • Как работает null safety в Dart? В чём разница между ?, ! и ???
  • Что такое isolates в Dart и чем они отличаются от потоков (threads)?
  • В чём разница между Future и Stream в Dart?