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