List<E>抽象 接口

具有长度的可索引对象集合。

此类的子类实现了不同类型的列表。最常见的列表类型有

  • 固定长度列表

    尝试使用可能改变列表长度的操作时将发生错误。

  • 可增长列表

    此类中定义的 API 的完整实现。

默认的可增长列表(由 [] 创建)保留一个内部缓冲区,并在必要时增长该缓冲区。这保证了add操作序列中的每个操作都以摊销常数时间执行。直接设置长度可能需要与新长度成比例的时间,并且可能会更改内部容量,以便后续的添加操作需要立即增加缓冲区容量。其他列表实现可能有不同的性能行为。

固定长度列表示例

final fixedLengthList = List<int>.filled(5, 0); // Creates fixed-length list.
print(fixedLengthList); // [0, 0, 0, 0, 0]
fixedLengthList[0] = 87;
fixedLengthList.setAll(1, [1, 2, 3]);
print(fixedLengthList); // [87, 1, 2, 3, 0]
// Fixed length list length can't be changed or increased
fixedLengthList.length = 0;  // Throws
fixedLengthList.add(499);    // Throws

可增长列表示例

final growableList = <String>['A', 'B']; // Creates growable list.

要将数据添加到可增长列表中,请使用 操作符[]addaddAll

growableList[0] = 'G';
print(growableList); // [G, B]
growableList.add('X');
growableList.addAll({'C', 'B'});
print(growableList); // [G, B, X, C, B]

要检查元素是否在列表中,以及其在列表中的位置,请使用 indexOflastIndexOf

final indexA = growableList.indexOf('A'); // -1 (not in the list)
final firstIndexB = growableList.indexOf('B'); // 1
final lastIndexB = growableList.lastIndexOf('B'); // 4

要从可增长列表中删除元素,请使用 removeremoveAtremoveLastremoveRangeremoveWhere

growableList.remove('C');
growableList.removeLast();
print(growableList); // [G, B, X]

要将元素插入列表中的某个位置,请使用 insertinsertAll

growableList.insert(1, 'New');
print(growableList); // [G, New, B, X]

要替换列表中的元素范围,请使用 fillRangereplaceRangesetRange

growableList.replaceRange(0, 2, ['AB', 'A']);
print(growableList); // [AB, A, B, X]
growableList.fillRange(2, 4, 'F');
print(growableList); // [AB, A, F, F]

要排序列表中的元素,请使用 sort

growableList.sort((a, b) => a.compareTo(b));
print(growableList); // [A, AB, F, F]

要随机洗牌此列表的元素,请使用 shuffle

growableList.shuffle();
print(growableList); // e.g. [AB, F, A, F]

要找到满足某些谓词的第一个元素,或者如果没有元素满足,则返回默认值,请使用 firstWhere

bool isVowel(String char) => char.length == 1 && "AEIOU".contains(char);
final firstVowel = growableList.firstWhere(isVowel, orElse: () => ''); // ''

存在类似的 lastWheresingleWhere 方法。

列表是 Iterable,并支持其所有方法,包括 wheremapwhereTypetoList

列表是 Iterable。迭代按索引顺序进行。更改值不会影响迭代,但更改有效索引(即更改列表的长度)会在迭代步骤之间导致 ConcurrentModificationError。这意味着只有可增长列表可以抛出 ConcurrentModificationError。如果长度临时更改并在继续迭代之前恢复,迭代器可能不会检测到它。

通常情况下,在列表操作进行时(例如在调用forEachsort时),不允许修改列表的长度(添加或删除元素)。如果在迭代列表时改变其长度,无论是直接迭代还是通过迭代基于列表的Iterable,都会中断迭代。

实现类型
实现者
可用的扩展

构造函数

List.empty({bool growable = false})
创建一个新的空列表。
factory
List.filled(int length, E fill, {bool growable = false})
创建一个指定长度的列表,每个位置的值为fill
factory
List.from(Iterable elements, {bool growable = true})
创建一个包含所有elements的列表。
factory
List.generate(int length, E generator(int index), {bool growable = true})
生成一个值列表。
factory
List.of(Iterable<E> elements, {bool growable = true})
elements创建一个列表。
factory
List.unmodifiable(Iterable elements)
创建一个包含所有elements的不可修改列表。
factory

属性

first ↔ E
第一个元素。
getter/setter 对继承-getter
hashCode int
此对象的哈希码。
无setter继承
isEmpty bool
此集合是否没有元素。
无setter继承
isNotEmpty bool
此集合是否至少有一个元素。
无setter继承
iterator Iterator<E>
一个新的 Iterator,允许迭代此 Iterable 的元素。
无setter继承
last ↔ E
最后一个元素。
getter/setter 对继承-getter
length int
此列表中的对象数量。
getter/setter 对覆盖-getter
reversed Iterable<E>
此列表中对象的反向顺序的 Iterable
无setter
runtimeType Type
表示对象运行时类型的表示。
无setter继承
single → E
检查此可迭代是否只有一个元素,并返回该元素。
无setter继承

方法

add(E value) → void
value 添加到此列表的末尾,扩展长度为1。
addAll(Iterable<E> iterable) → void
iterable 的所有对象追加到此列表的末尾。
any(bool test(E element)) bool
检查此可迭代是否任何元素满足 test
继承
asMap() Map<int, E>
此列表的不可修改 Map 视图。
cast<R>() List<R>
将此列表作为 R 实例列表的视图返回。
覆盖
clear() → void
从此列表中删除所有对象;列表长度变为0。
contains(Object? element) bool
检查集合是否包含与 element 相等的元素。
继承
elementAt(int index) → E
返回索引为 index 的元素。
继承
every(bool test(E element)) bool
检查此可迭代对象的每个元素是否满足 test
继承
expand<T>(Iterable<T> toElements(E element)) Iterable<T>
将此可迭代对象的每个元素扩展为零个或多个元素。
继承
fillRange(int start, int end, [E? fillValue]) → void
使用 fillValue 覆盖元素的范围。
firstWhere(bool test(E element), {E orElse()?}) → E
返回满足给定谓词 test 的第一个元素。
继承
fold<T>(T initialValue, T combine(T previousValue, E element)) → T
通过迭代将集合中的每个元素与现有值结合,将集合减少到单个值。
继承
followedBy(Iterable<E> other) Iterable<E>
创建当前可迭代对象和 other 的懒加载连接。
继承
forEach(void action(E element)) → void
按迭代顺序对可迭代对象的每个元素调用 action
继承
getRange(int start, int end) Iterable<E>
创建一个可迭代对象,用于遍历元素的范围。
indexOf(E element, [int start = 0]) int
列表中 element 的第一个索引。
indexWhere(bool test(E element), [int start = 0]) int
列表中满足提供的 test 的第一个索引。
insert(int index, E element) → void
在列表的 index 位置插入 element
insertAll(int index, Iterable<E> iterable) → void
在列表的 index 位置插入 iterable 中的所有对象。
join([String separator = ""]) String
将每个元素转换为 String 并连接这些字符串。
继承
lastIndexOf(E element, [int? start]) int
此列表中 element 的最后一个索引。
lastIndexWhere(bool test(E element), [int? start]) int
列表中满足提供的 test 的最后一个索引。
lastWhere(bool test(E element), {E orElse()?}) → E
满足给定谓词 test 的最后一个元素。
继承
map<T>(T toElement(E e)) Iterable<T>
通过 toElement 修改的当前可迭代元素。
继承
noSuchMethod(Invocation invocation) → dynamic
当访问不存在的方法或属性时被调用。
继承
reduce(E combine(E value, E element)) → E
通过迭代使用提供的函数结合集合的元素,将集合缩减为一个单一值。
继承
remove(Object? value) bool
从此列表中移除 value 的第一个出现。
removeAt(int index) → E
从此列表中移除位于 index 位置的元素。
removeLast() → E
移除并返回此列表中的最后一个对象。
removeRange(int start, int end) → void
从列表中删除一个范围的元素。
removeWhere(bool test(E element)) → void
删除所有满足test条件的对象。
replaceRange(int start, int end, Iterable<E> replacements) → void
replacements中的元素替换一个范围的元素。
retainWhere(bool test(E element)) → void
删除所有不满足test条件的对象。
setAll(int index, Iterable<E> iterable) → void
iterable中的对象覆盖元素。
setRange(int start, int end, Iterable<E> iterable, [int skipCount = 0]) → void
iterable中的一些元素写入此列表的范围。
shuffle([Random? random]) → void
随机打乱此列表的元素。
singleWhere(bool test(E element), {E orElse()?}) → E
返回满足 test 的单一元素。
继承
skip(int count) Iterable<E>
创建一个 Iterable,提供除了前 count 个元素之外的所有元素。
继承
skipWhile(bool test(E value)) Iterable<E>
创建一个在 test 满足时跳过前面的元素 Iterable
继承
sort([int compare(E a, E b)?]) → void
根据 compare 函数指定的顺序对列表进行排序。
sublist(int start, [int? end]) List<E>
返回一个新列表,包含从 startend 之间的元素。
take(int count) Iterable<E>
创建一个包含此可迭代对象前 count 个元素的懒惰可迭代对象。
继承
takeWhile(bool test(E value)) Iterable<E>
创建一个包含满足 test 的前面元素的懒惰可迭代对象。
继承
toList({bool growable = true}) List<E>
创建一个包含此可迭代对象中元素的列表
继承
toSet() Set<E>
创建一个包含与此可迭代对象相同元素的集合
继承
toString() String
此对象的字符串表示形式。
继承
where(bool test(E element)) Iterable<E>
创建一个新的惰性可迭代对象,其中包含所有满足谓词test的元素。
继承
whereType<T>() Iterable<T>
创建一个新的惰性可迭代对象,其中包含所有具有类型T的元素。
继承

运算符

operator +(List<E> other) List<E>
返回此列表和other的连接。
operator ==(Object other) bool
此列表是否等于other
覆盖
operator [](int index) → E
列表中给定index处的对象。
operator []=(int index, E value) → void
将列表中给定index处的值设置为value

静态方法

castFrom<S, T>(List<S> source) List<T>
source 转换为 List
覆盖
copyRange<T>(List<T> target, int at, List<T> source, [int? start, int? end]) → void
将一个列表的范围复制到另一个列表中。
writeIterable<T>(List<T> target, int at, Iterable<T> source) → void
将可迭代对象的元素写入列表。