1# 线性容器LinkedList 2 3>  **说明:** 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```