具有长度的可索引对象集合。
此类的子类实现了不同类型的列表。最常见的列表类型有
-
固定长度列表
尝试使用可能改变列表长度的操作时将发生错误。
-
可增长列表
此类中定义的 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.
要将数据添加到可增长列表中,请使用 操作符[]、add 或 addAll。
growableList[0] = 'G';
print(growableList); // [G, B]
growableList.add('X');
growableList.addAll({'C', 'B'});
print(growableList); // [G, B, X, C, B]
要检查元素是否在列表中,以及其在列表中的位置,请使用 indexOf 或 lastIndexOf。
final indexA = growableList.indexOf('A'); // -1 (not in the list)
final firstIndexB = growableList.indexOf('B'); // 1
final lastIndexB = growableList.lastIndexOf('B'); // 4
要从可增长列表中删除元素,请使用 remove、removeAt、removeLast、removeRange 或 removeWhere。
growableList.remove('C');
growableList.removeLast();
print(growableList); // [G, B, X]
要将元素插入列表中的某个位置,请使用 insert 或 insertAll。
growableList.insert(1, 'New');
print(growableList); // [G, New, B, X]
要替换列表中的元素范围,请使用 fillRange、replaceRange 或 setRange。
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: () => ''); // ''
存在类似的 lastWhere 和 singleWhere 方法。
列表是 Iterable,并支持其所有方法,包括 where、map、whereType 和 toList。
列表是 Iterable。迭代按索引顺序进行。更改值不会影响迭代,但更改有效索引(即更改列表的长度)会在迭代步骤之间导致 ConcurrentModificationError。这意味着只有可增长列表可以抛出 ConcurrentModificationError。如果长度临时更改并在继续迭代之前恢复,迭代器可能不会检测到它。
通常情况下,在列表操作进行时(例如在调用forEach或sort时),不允许修改列表的长度(添加或删除元素)。如果在迭代列表时改变其长度,无论是直接迭代还是通过迭代基于列表的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> - 返回一个新列表,包含从
start
到end
之间的元素。 -
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
。