Как создать неизменяемый список – 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)? Почему?
Продолжение в комментарии ↲
