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