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<T> 566 567克隆一个与LinkedList相同的实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。 568 569**系统能力:** SystemCapability.Utils.Lang 570 571**返回值:** 572 573| 类型 | 说明 | 574| -------- | -------- | 575| LinkedList<T> | 返回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<T>) => 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<T> | 否 | 当前调用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<T> 712 713把当前LinkedList实例转换成数组,并返回转换后的数组。 714 715**系统能力:** SystemCapability.Utils.Lang 716 717**返回值:** 718 719| 类型 | 说明 | 720| -------- | -------- | 721| Array<T> | 返回转换后的数组。 | 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<T> 810 811返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 812 813**系统能力:** SystemCapability.Utils.Lang 814 815**返回值:** 816 817| 类型 | 说明 | 818| -------- | -------- | 819| IterableIterator<T> | 返回一个迭代器。 | 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```