在Dart中,List.unmodifiable会创建一个不可修改的视图,还是一个全新的独立列表?

时间:2018-05-13 01:11:29

标签: performance list dictionary dart

1)在Dart中,List.unmodifiable(someList)Map.unmodifiable(someMap)会创建一个不可修改的视图,还是一个全新的独立列表/地图?我猜它是一个新的独立名单,但我必须确定。

如果它是一个视图,对原始列表的修改将修改现在不那么不可修改的列表,但有时您只是丢弃原始列表,并且创建视图要快得多。

2)并且,如果他们创建独立的列表/地图,是否有某种方法可以创建不可修改的视图,以达到性能目的?

3)从另一个创建dart列表的大O是什么,包括由List.unmodifiable(someList)创建的dart列表?例如,这是Java集合的信息:https://gist.github.com/FedericoPonzi/8d5094dbae33cbb94536a73f62d1c1a0

更新 好的,我已经通过查找:https://api.dartlang.org/stable/1.23.0/dart-collection/UnmodifiableListView-class.html

回答了我自己的问题2

但我仍然需要知道问题1和3的答案。

1 个答案:

答案 0 :(得分:3)

对于#1,复制项目。这是一个全新的独立名单。

对于#2,请参阅https://api.dartlang.org/dev/2.0.0-dev.55.0/dart-collection/dart-collection-library.html

UnmodifiableListViewUnmodifiableMapView

对于#3,Big(O)是N - 它复制所有元素,因此它必须访问每个元素。

如果你从另一个列表中使用List.unmodifiable,它就知道目标长度,所以它不必调整它正在迭代时创建的列表的大小。