对于以下打印,两个打印结果都相同。但是List<Dog> test = <Dog>[];
和List<Dog> test2 =List<Dog>();
之间有区别吗?
void main() {
List<Dog> test = <Dog>[];
List<Dog> test2 =List<Dog>();
Dog dog = Dog(10);
test.add(dog);
print(test[0].age);
test2.add(dog);
print(test2[0].age);
}
class Dog {
Dog({this.age});
int age;
}
答案 0 :(得分:1)
两者之间没有区别。两者都创建了文档here中所示的可增长列表。
默认的可增长列表(由new List()或[]返回)保留一个内部缓冲区,并在必要时增大该缓冲区。这保证了一系列添加操作将在摊销后的固定时间内执行。直接设置长度可能要花费与新长度成比例的时间,并且可能会更改内部容量,因此随后的添加操作将需要立即增加缓冲区容量。
与上面的不同之处在于,如果您要创建一个不可增长的列表。
为此,您将使用
List<Dog> fixedLengthList = new List(5);
在定长列表中,尝试使用可以更改列表长度的操作时会发生错误。