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})
创建一个新空列表。
工厂方法
List.filled(int length, E fill, {bool growable = false})
创建一个给定长度的列表,每个位置上都有fill
工厂方法
List.from(Iterable elements, {bool growable = true})
创建包含所有elements的列表。
工厂方法
List.generate(int length, E generator(int index), {bool growable = true})
生成值列表。
工厂方法
List.of(Iterable<E> elements, {bool growable = true})
elements创建一个列表。
工厂方法
List.unmodifiable(Iterable elements)
创建一个包含所有elements的不可修改的列表。
工厂方法

属性

first ↔ E
第一个元素。
getter/setter pairinherited-getter
hashCode int
本对象的哈希码。
no setterinherited
isEmpty bool
此集合没有元素。
no setterinherited
isNotEmpty bool
此集合至少有一个元素。
no setterinherited
迭代器 Iterator<E>
一个新的 Iterator,允许遍历此 Iterable 的元素。
no setterinherited
last ↔ E
最后一个元素。
getter/setter pairinherited-getter
length int
此列表中对象的数量。
getter/setter 对对override-getter
reversed Iterable<E>
逆序排列此列表中对象的 Iterable
无设置器
runtimeType Type
表示对象运行时类型。
no setterinherited
single → E
检查此可迭代的元素是否只有一个,并返回该元素。
no setterinherited

方法

add(E value) → void
value 添加到此列表的末尾,长度增加一个。
addAll(Iterable<E> iterable) → void
iterable 的所有对象追加到此列表的末尾。
any(bool test(E element)) bool
检查此可迭代中是否有任何元素满足 test
继承
asMap() Map<int, E>
此列表不可修改的 Map 视图。
cast<R>() List<R>
返回此列表作为 R 实例列表的视图。
override
clear() → void
从此列表中移除所有对象;列表的长度变为零。
contains(Object? element) bool
该集合是否包含与 element 相等的元素。
继承
elementAt(int index) → E
返回第 index 个元素。
继承
every(bool test(E element)) bool
检查该可迭代对象中的每个元素是否满足 test
继承
expand<T>(Iterable<T> toElements(E element), int end, [E? fillValue]) Iterable<T>
将此 Iterable 的每个元素展开成零个或多个元素。
继承
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>
创建一个遍历元素范围的 Iterable
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>
创建一个Iterable,当满足test时跳过前面的元素。
继承
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>
创建一个包含此 Iterable 元素的 List
继承
toSet() Set<E>
创建一个包含与该可迭代相同元素的 Set
继承
toString() String
该对象的字符串表示。
继承
where(bool test(E element)) Iterable<E>
创建一个新的具有所有满足谓词 test 的元素的懒 Iterable
继承
whereType<T>() Iterable<T>
创建一个新的具有所有类型为 T 的元素的懒 Iterable
继承

操作符

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

静态方法

castFrom<S, T>(List<S> source) List<T>
source 转换为 List
override
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
将可迭代对象中的元素写入列表中。