• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.util.List (线性容器List)
2
3List底层通过单向链表实现,每个节点有一个指向后一个元素的引用。当需要查询元素时,必须从头遍历,插入、删除效率高,查询效率低。List允许元素为null。
4
5List和[LinkedList](js-apis-linkedlist.md)相比,LinkedList是双向链表,可以快速地在头尾进行增删,而List是单向链表,无法双向操作。
6
7**推荐使用场景:** 当需要频繁的插入删除时,推荐使用List高效操作。
8
9文档中存在泛型的使用,涉及以下泛型标记符:<br>
10- T:Type,类
11
12> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
13>
14> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
15
16
17## 导入模块
18
19```ts
20import List from '@ohos.util.List';
21```
22
23
24## List
25
26### 属性
27
28**系统能力:** SystemCapability.Utils.Lang
29
30| 名称 | 类型 | 可读 | 可写 | 说明 |
31| -------- | -------- | -------- | -------- | -------- |
32| length | number | 是 | 否 | List的元素个数。 |
33
34
35### constructor
36
37constructor()
38
39List的构造函数。
40
41**系统能力:** SystemCapability.Utils.Lang
42
43**错误码:**
44
45以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
46
47| 错误码ID | 错误信息 |
48| -------- | -------- |
49| 10200012 | The List's constructor cannot be directly invoked. |
50
51**示例:**
52
53```ts
54let list = new List();
55```
56
57
58### add
59
60add(element: T): boolean
61
62在List尾部插入元素。
63
64**系统能力:** SystemCapability.Utils.Lang
65
66**参数:**
67
68| 参数名 | 类型 | 必填 | 说明 |
69| -------- | -------- | -------- | -------- |
70| element | T | 是 | 添加进去的元素。 |
71
72**返回值:**
73
74| 类型 | 说明 |
75| -------- | -------- |
76| boolean | 插入成功返回true,否则返回false。 |
77
78**错误码:**
79
80以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
81
82| 错误码ID | 错误信息 |
83| -------- | -------- |
84| 10200011 | The add method cannot be bound. |
85
86**示例:**
87
88```ts
89let list = new List();
90let result1 = list.add("a");
91let result2 = list.add(1);
92let b = [1, 2, 3];
93let result3 = list.add(b);
94let c = {name : "Dylon", age : "13"};
95let result4 = list.add(c);
96let result5 = list.add(false);
97```
98
99### insert
100
101insert(element: T, index: number): void
102
103在长度范围内任意位置插入指定元素。
104
105**系统能力:** SystemCapability.Utils.Lang
106
107**参数:**
108
109| 参数名 | 类型 | 必填 | 说明 |
110| -------- | -------- | -------- | -------- |
111| element | T | 是 | 插入元素。 |
112| index | number | 是 | 插入的位置索引。 |
113
114**错误码:**
115
116以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
117
118| 错误码ID | 错误信息 |
119| -------- | -------- |
120| 10200011 | The insert method cannot be bound. |
121| 10200001 | The value of index is out of range. |
122
123**示例:**
124
125```ts
126let list = new List();
127list.insert("A", 0);
128list.insert(0, 1);
129list.insert(true, 2);
130```
131
132### has
133
134has(element: T): boolean
135
136判断此List中是否含有该指定元素。
137
138**系统能力:** SystemCapability.Utils.Lang
139
140**参数:**
141
142| 参数名 | 类型 | 必填 | 说明 |
143| -------- | -------- | -------- | -------- |
144| element | T | 是 | 指定元素。 |
145
146**返回值:**
147
148| 类型 | 说明 |
149| -------- | -------- |
150| boolean | 包含指定元素返回true,否则返回false。 |
151
152**错误码:**
153
154以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
155
156| 错误码ID | 错误信息 |
157| -------- | -------- |
158| 10200011 | The has method cannot be bound. |
159
160**示例:**
161
162```ts
163let list = new List();
164list.add("squirrel");
165let result = list.has("squirrel");
166```
167
168### get
169
170get(index: number): T
171
172根据下标获取List中的元素。
173
174**系统能力:** SystemCapability.Utils.Lang
175
176**参数:**
177
178| 参数名 | 类型 | 必填 | 说明 |
179| -------- | -------- | -------- | -------- |
180| index | number | 是 | 要查找的下标。 |
181
182**返回值:**
183
184| 类型 | 说明 |
185| -------- | -------- |
186| T | 根据下标查找到的元素。 |
187
188**错误码:**
189
190以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
191
192| 错误码ID | 错误信息 |
193| -------- | -------- |
194| 10200011 | The get method cannot be bound. |
195
196**示例:**
197
198```ts
199let list = new List();
200list.add(2);
201list.add(4);
202list.add(5);
203list.add(2);
204list.add(1);
205list.add(2);
206list.add(4);
207let result = list.get(2);
208```
209
210### getLastIndexOf
211
212getLastIndexOf(element: T): number
213
214查找指定元素最后一次出现的下标值,查找失败返回-1。
215
216**系统能力:** SystemCapability.Utils.Lang
217
218**参数:**
219
220| 参数名 | 类型 | 必填 | 说明 |
221| -------- | -------- | -------- | -------- |
222| element | T | 是 | 指定元素。 |
223
224**返回值:**
225
226| 类型 | 说明 |
227| -------- | -------- |
228| number | 返回指定元素最后一次出现的下标值,没有找到返回-1。 |
229
230**错误码:**
231
232以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
233
234| 错误码ID | 错误信息 |
235| -------- | -------- |
236| 10200011 | The getLastIndexOf method cannot be bound. |
237
238**示例:**
239
240```ts
241let list = new List();
242list.add(2);
243list.add(4);
244list.add(5);
245list.add(2);
246list.add(1);
247list.add(2);
248list.add(4);
249let result = list.getLastIndexOf(2);
250```
251
252### getIndexOf
253
254getIndexOf(element: T): number
255
256查找指定元素第一次出现的下标值,查找失败返回-1。
257
258**系统能力:** SystemCapability.Utils.Lang
259
260**参数:**
261
262| 参数名 | 类型 | 必填 | 说明 |
263| -------- | -------- | -------- | -------- |
264| element | T | 是 | 指定元素。 |
265
266**返回值:**
267
268| 类型 | 说明 |
269| -------- | -------- |
270| number | 返回第一次找到指定元素的下标,没有找到返回-1。 |
271
272**错误码:**
273
274以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
275
276| 错误码ID | 错误信息 |
277| -------- | -------- |
278| 10200011 | The getIndexOf method cannot be bound. |
279
280**示例:**
281
282```ts
283let list = new List();
284list.add(2);
285list.add(4);
286list.add(5);
287list.add(2);
288list.add(1);
289list.add(2);
290list.add(4);
291let result = list.getIndexOf(2);
292```
293
294### equal
295
296equal(obj: Object): boolean
297
298比较指定对象与此List是否相等。
299
300**系统能力:** SystemCapability.Utils.Lang
301
302**参数:**
303
304| 参数名 | 类型 | 必填 | 说明 |
305| -------- | -------- | -------- | -------- |
306| obj | Object | 是 | 用来比较的对象。 |
307
308**返回值:**
309
310| 类型 | 说明 |
311| -------- | -------- |
312| boolean | 如果对象与此列表相同返回true,否则返回false。 |
313
314**错误码:**
315
316以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
317
318| 错误码ID | 错误信息 |
319| -------- | -------- |
320| 10200011 | The equal method cannot be bound. |
321
322**示例:**
323
324```ts
325let list = new List();
326list.add(2);
327list.add(4);
328list.add(5);
329let obj = new List();
330obj.add(2);
331obj.add(4);
332obj.add(5);
333let result = list.equal(obj);
334```
335
336### removeByIndex
337
338removeByIndex(index: number): T
339
340根据元素的下标值查找元素,返回元素后将其删除。
341
342**系统能力:** SystemCapability.Utils.Lang
343
344**参数:**
345
346| 参数名 | 类型 | 必填 | 说明 |
347| -------- | -------- | -------- | -------- |
348| index | number | 是 | 指定元素的下标值。 |
349
350**返回值:**
351
352| 类型 | 说明 |
353| -------- | -------- |
354| T | 返回删除的元素。 |
355
356**错误码:**
357
358以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
359
360| 错误码ID | 错误信息 |
361| -------- | -------- |
362| 10200011 | The removeByIndex method cannot be bound. |
363| 10200001 | The value of index is out of range. |
364
365**示例:**
366
367```ts
368let list = new List();
369list.add(2);
370list.add(4);
371list.add(5);
372list.add(2);
373list.add(4);
374let result = list.removeByIndex(2);
375```
376
377### remove
378
379remove(element: T): boolean
380
381删除查找到的第一个指定的元素。
382
383**系统能力:** SystemCapability.Utils.Lang
384
385**参数:**
386
387| 参数名 | 类型 | 必填 | 说明 |
388| -------- | -------- | -------- | -------- |
389| element | T | 是 | 指定元素。 |
390
391**返回值:**
392
393| 类型 | 说明 |
394| -------- | -------- |
395| boolean | 删除成功返回true,否则返回false。 |
396
397**错误码:**
398
399以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
400
401| 错误码ID | 错误信息 |
402| -------- | -------- |
403| 10200011 | The remove method cannot be bound. |
404
405**示例:**
406
407```ts
408let list = new List();
409list.add(2);
410list.add(4);
411list.add(5);
412list.add(4);
413let result = list.remove(2);
414```
415
416### replaceAllElements
417
418replaceAllElements(callbackFn: (value: T, index?: number, list?: List&lt;T&gt;) => T,
419thisArg?: Object): void
420
421用户操作List中的元素,用操作后的元素替换原元素并返回操作后的元素。
422
423**系统能力:** SystemCapability.Utils.Lang
424
425**参数:**
426
427| 参数名 | 类型 | 必填 | 说明 |
428| -------- | -------- | -------- | -------- |
429| callbackFn | function | 是 | 回调函数。 |
430| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
431
432callbackfn的参数说明:
433
434| 参数名 | 类型 | 必填 | 说明 |
435| -------- | -------- | -------- | -------- |
436| value | T | 是 | 当前遍历到的元素。 |
437| index | number | 否 | 当前遍历到的下标值。 |
438| list | List&lt;T&gt; | 否 | 当前调用replaceAllElements方法的实例对象。 |
439
440**错误码:**
441
442以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
443
444| 错误码ID | 错误信息 |
445| -------- | -------- |
446| 10200011 | The replaceAllElements method cannot be bound. |
447
448**示例:**
449
450```ts
451let list = new List();
452list.add(2);
453list.add(4);
454list.add(5);
455list.add(4);
456list.replaceAllElements((value) => {
457  // 用户操作逻辑根据实际场景进行添加。
458  return value;
459});
460```
461
462### forEach
463
464forEach(callbackFn: (value: T, index?: number, List?: List&lt;T&gt;) => void,
465thisArg?: Object): void
466
467通过回调函数来遍历List实例对象上的元素以及元素对应的下标。
468
469**系统能力:** SystemCapability.Utils.Lang
470
471**参数:**
472
473| 参数名 | 类型 | 必填 | 说明 |
474| -------- | -------- | -------- | -------- |
475| callbackFn | function | 是 | 回调函数。 |
476| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
477
478callbackfn的参数说明:
479
480| 参数名 | 类型 | 必填 | 说明 |
481| -------- | -------- | -------- | -------- |
482| value | T | 是 | 当前遍历到的元素。 |
483| index | number | 否 | 当前遍历到的下标值。 |
484| List | List&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
485
486**错误码:**
487
488以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
489
490| 错误码ID | 错误信息 |
491| -------- | -------- |
492| 10200011 | The forEach method cannot be bound. |
493
494**示例:**
495
496```ts
497let list = new List();
498list.add(2);
499list.add(4);
500list.add(5);
501list.add(4);
502list.forEach((value, index) => {
503    console.log("value:" + value, "index:" + index);
504});
505```
506
507### sort
508
509sort(comparator: (firstValue: T, secondValue: T) => number): void
510
511对List中的元素进行一个排序操作。
512
513**系统能力:** SystemCapability.Utils.Lang
514
515**参数:**
516
517| 参数名 | 类型 | 必填 | 说明 |
518| -------- | -------- | -------- | -------- |
519| comparator | function | 是 | 回调函数。 |
520
521comparator的参数说明:
522
523| 参数名 | 类型 | 必填 | 说明 |
524| -------- | -------- | -------- | -------- |
525| firstValue | T | 是 | 前一项元素。 |
526| secondValue | T | 是 | 后一项元素。 |
527
528**错误码:**
529
530以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
531
532| 错误码ID | 错误信息 |
533| -------- | -------- |
534| 10200011 | The sort method cannot be bound. |
535
536**示例:**
537
538```ts
539let list = new List();
540list.add(2);
541list.add(4);
542list.add(5);
543list.add(4);
544list.sort((a: number, b: number) => a - b); // 结果为升序排列
545list.sort((a: number, b: number) => b - a); // 结果为降序排列
546```
547
548### getSubList
549
550getSubList(fromIndex: number, toIndex: number): List&lt;T&gt;
551
552根据下标截取List中的一段元素,并返回这一段List实例,包括起始值但不包括终止值。
553
554**系统能力:** SystemCapability.Utils.Lang
555
556**参数:**
557
558| 参数名 | 类型 | 必填 | 说明 |
559| -------- | -------- | -------- | -------- |
560| fromIndex | number | 是 | 起始下标。 |
561| toIndex | number | 是 | 终止下标。 |
562
563**返回值:**
564
565| 类型 | 说明 |
566| -------- | -------- |
567| List&lt;T&gt; | 返回List对象实例。 |
568
569**错误码:**
570
571以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
572
573| 错误码ID | 错误信息 |
574| -------- | -------- |
575| 10200011 | The getSubList method cannot be bound. |
576| 10200001 | The value of fromIndex or toIndex is out of range. |
577
578**示例:**
579
580```ts
581let list = new List();
582list.add(2);
583list.add(4);
584list.add(5);
585list.add(4);
586let result = list.getSubList(1, 3);
587```
588
589### clear
590
591clear(): void
592
593清除List中的所有元素,并把length置为0。
594
595**系统能力:** SystemCapability.Utils.Lang
596
597**错误码:**
598
599以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
600
601| 错误码ID | 错误信息 |
602| -------- | -------- |
603| 10200011 | The clear method cannot be bound. |
604
605**示例:**
606
607```ts
608let list = new List();
609list.add(2);
610list.add(4);
611list.add(5);
612list.add(4);
613list.clear();
614```
615
616### set
617
618set(index: number, element: T): T
619
620将此 List 中指定位置的元素替换为指定元素。
621
622**系统能力:** SystemCapability.Utils.Lang
623
624**参数:**
625
626| 参数名 | 类型 | 必填 | 说明 |
627| -------- | -------- | -------- | -------- |
628| index | number | 是 | 查找的下标值。 |
629| element | T | 是 | 用来替换的元素。 |
630
631**返回值:**
632
633| 类型 | 说明 |
634| -------- | -------- |
635| T | 返回替换后的元素 |
636
637**错误码:**
638
639以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
640
641| 错误码ID | 错误信息 |
642| -------- | -------- |
643| 10200011 | The set method cannot be bound. |
644| 10200001 | The value of index is out of range. |
645
646**示例:**
647
648```ts
649let list = new List();
650list.add(2);
651list.add(4);
652list.add(5);
653list.add(4);
654let result = list.set(2, "b");
655```
656
657### convertToArray
658
659convertToArray(): Array&lt;T&gt;
660
661把当前List实例转换成数组,并返回转换后的数组。
662
663**系统能力:** SystemCapability.Utils.Lang
664
665**返回值:**
666
667| 类型 | 说明 |
668| -------- | -------- |
669| Array&lt;T&gt; | 返回转换后的数组。 |
670
671**错误码:**
672
673以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
674
675| 错误码ID | 错误信息 |
676| -------- | -------- |
677| 10200011 | The convertToArray method cannot be bound. |
678
679**示例:**
680
681```ts
682let list = new List();
683list.add(2);
684list.add(4);
685list.add(5);
686list.add(4);
687let result = list.convertToArray();
688```
689
690### isEmpty
691
692isEmpty(): boolean
693
694判断该List是否为空。
695
696**系统能力:** SystemCapability.Utils.Lang
697
698**返回值:**
699
700| 类型 | 说明 |
701| -------- | -------- |
702| boolean | 为空返回true,不为空返回false。 |
703
704**错误码:**
705
706以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
707
708| 错误码ID | 错误信息 |
709| -------- | -------- |
710| 10200011 | The isEmpty method cannot be bound. |
711
712**示例:**
713
714```ts
715let list = new List();
716list.add(2);
717list.add(4);
718list.add(5);
719list.add(4);
720let result = list.isEmpty();
721```
722
723### getFirst
724
725getFirst(): T
726
727获取List实例中的第一个元素。
728
729**系统能力:** SystemCapability.Utils.Lang
730
731**返回值:**
732
733| 类型 | 说明 |
734| -------- | -------- |
735| T | 返回实例的第一个元素。 |
736
737**错误码:**
738
739以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
740
741| 错误码ID | 错误信息 |
742| -------- | -------- |
743| 10200011 | The getFirst method cannot be bound. |
744
745**示例:**
746
747```ts
748let list = new List();
749list.add(2);
750list.add(4);
751list.add(5);
752list.add(4);
753let result = list.getFirst();
754```
755
756### getLast
757
758getLast(): T
759
760获取List实例中的最后一个元素。
761
762**系统能力:** SystemCapability.Utils.Lang
763
764**返回值:**
765
766| 类型 | 说明 |
767| -------- | -------- |
768| T | 返回实例的最后一个元素。 |
769
770**错误码:**
771
772以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
773
774| 错误码ID | 错误信息 |
775| -------- | -------- |
776| 10200011 | The getLast method cannot be bound. |
777
778**示例:**
779
780```ts
781let list = new List();
782list.add(2);
783list.add(4);
784list.add(5);
785list.add(4);
786let result = list.getLast();
787```
788
789### [Symbol.iterator]
790
791[Symbol.iterator]\(): IterableIterator&lt;T&gt;
792
793返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
794
795**系统能力:** SystemCapability.Utils.Lang
796
797**返回值:**
798
799| 类型 | 说明 |
800| -------- | -------- |
801| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
802
803**错误码:**
804
805以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
806
807| 错误码ID | 错误信息 |
808| -------- | -------- |
809| 10200011 | The Symbol.iterator method cannot be bound. |
810
811**示例:**
812
813```ts
814let list = new List();
815list.add(2);
816list.add(4);
817list.add(5);
818list.add(4);
819
820// 使用方法一:
821for (let item of list) {
822  console.log("value: " + item);
823}
824
825// 使用方法二:
826let iter = list[Symbol.iterator]();
827let temp = iter.next().value;
828while(temp != undefined) {
829  console.log("value: " + temp);
830  temp = iter.next().value;
831}
832```