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

Mar*_*rcG 2 performance dictionary list dart

1)在Dart中,执行List.unmodifiable(someList)Map.unmodifiable(someMap)创建一个不可修改的视图,或者创建一个全新的独立列表/地图吗?我猜这是一个新的独立列表,但我必须确定。

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

2)并且,如果它们创建了独立的列表/映射,是否有某种方法可以创建出于性能目的而无法修改的视图?

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

更新: 好的,我已经找到了这个,回答了我自己的第二个问题:https : //api.dartlang.org/stable/1.23.0/dart-collection/UnmodifiableListView-class.html

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

Kev*_*ore 5

对于#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从另一个列表中使用,它会知道目标长度,因此在迭代过程中不必调整其创建列表的大小。

  • @Dennis :这种情况下的视图意味着一种“看待”事物的方式,就好像它是其他事物一样。在这种情况下,您*查看*列表是不可修改的,即使它不是。您不会在内存内部创建新列表,因为视图由原始列表支持。 (2认同)