具有长度的可索引对象集合。
该类的子类实现了不同类型的列表。最常见的列表类型包括
-
固定长度列表
尝试使用可能改变列表长度的操作时会发生错误。
-
可增长列表
本类中定义的 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,将破坏迭代。
- 实现类型
- 实现者
- DomRectList
- DomStringList
- FileList
- Float32List
- Float32x4List
- Float64List
- Float64x2List
- HtmlCollection
- ImmutableListMixin
- Int8List
- Int16List
- Int32List
- Int32x4List
- Int64List
- 长度列表
- 列表基础
- MimeTypeArray
- NodeList
- 数字列表
- PluginArray
- SourceBufferList
- 语音语法列表
- 字符串列表
- 文本轨道提示列表
- 文本轨道列表
- 触摸列表
- 变换列表
- Uint8ClampedList
- Uint8List
- Uint16List
- Uint32List
- Uint64List
- 不可修改的可视列表
- 可用的扩展
构造函数
- 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> - 返回一个包含从
start
到end
元素的新列表。 -
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
。