我无法理解 Dart SDK 中算法的有效性。
这是算法(列出工厂dart:core
,文件list.dart
)
factory List.from(Iterable other, { bool growable: true }) {
List<E> list = new List<E>();
for (E e in other) {
list.add(e);
}
if (growable) return list;
int length = list.length;
List<E> fixedList = new List<E>(length);
for (int i = 0; i < length; i ) {
fixedList[i] = list[i];
}
return fixedList;
}
如果growable
是false
,则将创建两个列表。
List<E> list = new List<E>();
List<E> fixedList = new List<E>(length);
但是在这种情况下创建列表 #1 是多余的,因为它是Iterable other
. 它只是浪费CPU时间和内存。
在这种情况下,该算法将更有效,因为它不会创建不必要的列表#1 ( growable
is false
)。
factory List.from(Iterable other, { bool growable: true }) {
if(growable) {
List<E> list = new List<E>();
for (E e in other) {
list.add(e);
}
return list;
}
List<E> fixedList = new List<E>(other.length);
var i = 0;
for (E e in other) {
fixedList[i++] = e;
}
return fixedList;
}
还是我错了,错过了一些编程的微妙之处?