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