Обновить

Как создать неизменяемый список – UnmodifiableListView или List.unmodifiable?

Для начала, давайте попробуем создать неизменяемый (именно unmodifiable, не путать с immutable) список разными способами:

// Dart version: 3.1.0 - 11.0.dev
import 'dart:collection';

void main() {
  // Выводимый тип - List<String>
  const colors = ['?', '?', '?', '?']; // или final

  // Выводимый тип - List<dynamic>
  final colors1 = List.unmodifiable(colors); 
  // используйте List<String>.unmodifiable(), чтобы тип выводился

  // Выводимый тип - UnmodifiableListView<String>
  final colors2 = UnmodifiableListView(colors);
}

Теперь давайте попробуем изменить первый элемент коллекции:

colors[0] = '?';
colors1[0] = '?';
colors2[0] = '?';

В каждом случае мы получим:

Unhandled Exception: Unsupported operation: Cannot modify an unmodifiable list

Неизменяемый список создан, что очень хорошо, однако, здесь есть подводные камни. Сложность алгоритма для List.unmodifiable – O(n), а для UnmodifiableListView – O(1)? Почему?

Продолжение в комментарии ↲

Всего голосов 3: ↑3 и ↓0+3
Комментарии3

Microsoft представила WSL 3.0 с поддержкой запуска Linux-контейнеров в Windows

Microsoft представила подсистему Windows для Linux (Windows Subsystem for Linux - WSL) 3.0, позволяющую запускать Linux‑приложения в Windows. Новая ветка примечательна реализацией возможности для запуска Linux‑контейнеров в Windows и переходом на ядро Linux 6.18. Исходный код применяемых в WSL утилит командной строки, фоновых процессов для Linux‑окружений, графического стека wslg, сервисов для запуска контейнеров и виртуальной машины опубликован на GitHub под лицензией MIT. Версия WSL 2.0 вышла в сентябре 2023 года.

Microsoft представила WSL 3.0 с поддержкой запуска Linux-контейнеров в Windows

Публикации