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