js-apis-list.md 13.4 KB
Newer Older
L
linhaoran 已提交
1 2 3 4 5
# 线性容器List 

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

Z
zengyawen 已提交
6
List底层通过单向链表实现,每个节点有一个指向后一个元素的引用。当需要查询元素时,必须从头遍历,插入、删除效率高,查询效率低。List允许元素为null。
7 8 9 10

List和[LinkedList](js-apis-linkedlist.md)相比,LinkedList是双向链表,可以快速地在头尾进行增删,而List是单向链表,无法双向操作。

**推荐使用场景:** 当需要频繁的插入删除时,推荐使用List高效操作。
L
linhaoran 已提交
11

L
lengchangjing 已提交
12 13 14
文档中存在泛型的使用,涉及以下泛型标记符:<br>
- T: Type, 类

L
linhaoran 已提交
15 16
## 导入模块

17
```ts
18
import List from '@ohos.util.List';  
L
linhaoran 已提交
19 20 21 22 23 24 25
```


## List

### 属性

Z
zengyawen 已提交
26 27
**系统能力:** SystemCapability.Utils.Lang

L
linhaoran 已提交
28 29
| 名称 | 参数类型 | 可读 | 可写 | 说明 |
| -------- | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
30
| length | number | 是 | 否 | List的元素个数。 |
L
linhaoran 已提交
31 32 33 34


### constructor

35
constructor()
L
linhaoran 已提交
36 37 38

List的构造函数。

Z
zengyawen 已提交
39 40
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
41 42

**示例:**
L
linhaoran 已提交
43

44
```ts
Z
zengyawen 已提交
45 46
let list = new List();
```
L
linhaoran 已提交
47 48 49 50


### add

Z
zengyawen 已提交
51
add(element: T): boolean
L
linhaoran 已提交
52 53 54

在List尾部插入元素。

Z
zengyawen 已提交
55 56
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
57 58 59 60 61 62 63 64 65 66 67 68 69 70
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 添加进去的元素。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 插入成功返回true,否则返回false。 |

**示例:**

71
```ts
72
let list = new List();
73 74
let result = list.add("a");
let result1 = list.add(1);
Z
zengyawen 已提交
75 76
let b = [1, 2, 3];
list.add(b);
L
lengchangjing 已提交
77
let c = {name : "Dylon", age : "13"};
78
let result3 = list.add(false);
Z
zengyawen 已提交
79
```
L
linhaoran 已提交
80 81 82

### insert

Z
zengyawen 已提交
83
insert(element: T, index: number): void
L
linhaoran 已提交
84 85 86

在长度范围内任意位置插入指定元素。

Z
zengyawen 已提交
87 88
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
89 90 91 92 93 94
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 插入元素。 |
| index | number | 是 | 插入的位置索引。 |
L
linhaoran 已提交
95

Z
zengyawen 已提交
96 97
**示例:**

98
```ts
Z
zengyawen 已提交
99 100 101 102 103
let list = new List();
list.insert("A", 0);
list.insert(0, 1);
list.insert(true, 2);
```
L
linhaoran 已提交
104 105 106

### has

Z
zengyawen 已提交
107
has(element: T): boolean
L
linhaoran 已提交
108 109 110

判断此List中是否含有该指定元素。

Z
zengyawen 已提交
111 112
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
113 114 115 116 117
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 指定元素。 |
L
linhaoran 已提交
118

Z
zengyawen 已提交
119
**返回值:**
L
linhaoran 已提交
120

Z
zengyawen 已提交
121 122 123 124 125 126
| 类型 | 说明 |
| -------- | -------- |
| boolean | 包含指定元素返回true,否则返回false。 |

**示例:**

127
```ts
Z
zengyawen 已提交
128
let list = new List();
L
lengchangjing 已提交
129 130 131
let result = list.has("squirrel");
list.add("squirrel");
let result1 = list.has("squirrel");
Z
zengyawen 已提交
132
```
L
linhaoran 已提交
133 134 135

### get

Z
zengyawen 已提交
136
get(index: number): T
L
linhaoran 已提交
137 138 139

根据下标获取List中的元素。

Z
zengyawen 已提交
140 141
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
142 143 144 145 146 147 148 149 150 151 152 153 154 155
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| index | number | 是 | 要查找的下标。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 根据下标查找到的元素。 |

**示例:**

156
```ts
Z
zengyawen 已提交
157 158 159 160 161 162 163 164
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(1);
list.add(2);
list.add(4);
165
let result = list.get(2);
Z
zengyawen 已提交
166 167
```

L
linhaoran 已提交
168 169
### getLastIndexOf

Z
zengyawen 已提交
170 171 172 173
getLastIndexOf(element: T): number

查找指定元素最后一次出现的下标值,查找失败返回-1。

Z
zengyawen 已提交
174 175
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
176 177 178 179 180 181 182 183 184 185
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 指定元素。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
L
lengchangjing 已提交
186
| number | 返回指定元素最后一次出现的下标值,没有找到返回-1。 |
Z
zengyawen 已提交
187 188 189

**示例:**

190
```ts
Z
zengyawen 已提交
191 192 193 194 195 196 197 198
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(1);
list.add(2);
list.add(4);
199
let result = list.getLastIndexOf(2);
Z
zengyawen 已提交
200
```
L
linhaoran 已提交
201 202 203

### getIndexOf

Z
zengyawen 已提交
204 205 206 207
getIndexOf(element: T): number

查找指定元素第一次出现的下标值,查找失败返回-1。

Z
zengyawen 已提交
208 209
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
210 211 212 213 214 215 216 217 218 219
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 指定元素。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
220
| number | 返回第一次找到指定元素的下标,没有找到返回-1。 |
Z
zengyawen 已提交
221 222 223

**示例:**

224
```ts
Z
zengyawen 已提交
225 226 227 228 229 230 231 232 233
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(1);
list.add(2);
list.add(4);
list.getIndexOf(2);
234
let result = list.getIndexOf(2);
Z
zengyawen 已提交
235
```
L
linhaoran 已提交
236 237 238

### equal

Z
zengyawen 已提交
239 240 241 242
equal(obj: Object): boolean

比较指定对象与此List是否相等。

Z
zengyawen 已提交
243 244
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
245 246 247 248 249 250 251 252 253 254
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| obj | Object | 是 | 用来比较的对象。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
L
lengchangjing 已提交
255
| boolean | 如果对象与此列表相同返回true,否则返回false。 |
Z
zengyawen 已提交
256 257 258

**示例:**

259
```ts
Z
zengyawen 已提交
260 261 262 263 264 265 266 267 268 269
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
let obj1 = new List();
obj1.add(2);
obj1.add(4);
obj1.add(5);
list.equal(obj1);
L
lengchangjing 已提交
270
let obj2 = {name : "Dylon", age : "13"};
271
let result = list.equal(obj2);
Z
zengyawen 已提交
272 273
```

L
linhaoran 已提交
274 275
### removeByIndex

Z
zengyawen 已提交
276
removeByIndex(index: number): T
L
linhaoran 已提交
277 278 279

根据元素的下标值查找元素,返回元素后将其删除。

Z
zengyawen 已提交
280 281
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
282 283 284 285 286 287 288 289 290 291 292 293 294 295
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| index | number | 是 | 指定元素的下标值。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回删除的元素。 |

**示例:**

296
```ts
Z
zengyawen 已提交
297 298 299 300 301 302
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(2);
list.add(4);
303
let result = list.removeByIndex(2);
Z
zengyawen 已提交
304
```
L
linhaoran 已提交
305 306 307

### remove

Z
zengyawen 已提交
308
remove(element: T): boolean
L
linhaoran 已提交
309 310 311

删除查找到的第一个指定的元素。

Z
zengyawen 已提交
312 313
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
314 315 316 317
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
318
| element | T | 是 | 指定元素。 |
Z
zengyawen 已提交
319 320 321 322 323 324 325 326 327

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 删除成功返回true,否则返回false。 |

**示例:**

328
```ts
Z
zengyawen 已提交
329 330 331 332 333
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
334
let result = list.remove(2);
Z
zengyawen 已提交
335
```
L
linhaoran 已提交
336 337

### replaceAllElements
338

L
linhaoran 已提交
339
replaceAllElements(callbackfn: (value: T, index?: number, list?: List&lt;T&gt;) => T,
Z
zengyawen 已提交
340
thisArg?: Object): void
L
linhaoran 已提交
341 342 343

用户操作List中的元素,用操作后的元素替换原元素并返回操作后的元素。

Z
zengyawen 已提交
344 345
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
346 347 348 349 350 351 352 353 354 355 356 357 358
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callbackfn | function | 是 | 回调函数。 |
| thisArg | Object | 否 | callbackfn被调用时用作this值。 |

callbackfn的参数说明:

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | T | 是 | 当前遍历到的元素。 |
| index | number | 否 | 当前遍历到的下标值。 |
359
| list | List&lt;T&gt; | 否 | 当前调用replaceAllElements方法的实例对象。 |
Z
zengyawen 已提交
360 361 362

**示例:**

363
```ts
Z
zengyawen 已提交
364 365 366 367 368
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
369
list.replaceAllElements((value: number, index: number) => {
Z
zengyawen 已提交
370 371
  return value = 2 * value;
});
372
list.replaceAllElements((value: number, index: number) => {
Z
zengyawen 已提交
373 374 375 376
  return value = value - 2;
});
```

L
linhaoran 已提交
377
### forEach
378

379
forEach(callbackfn: (value: T, index?: number, List?: List&lt;T&gt;) => void,
Z
zengyawen 已提交
380
thisArg?: Object): void
L
linhaoran 已提交
381 382 383

通过回调函数来遍历List实例对象上的元素以及元素对应的下标。

Z
zengyawen 已提交
384 385
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
386 387 388 389
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
390 391
| callbackfn | function | 是 | 回调函数。 |
| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
Z
zengyawen 已提交
392 393 394 395 396 397 398

callbackfn的参数说明:

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | T | 是 | 当前遍历到的元素。 |
| index | number | 否 | 当前遍历到的下标值。 |
399
| List | List&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
Z
zengyawen 已提交
400 401 402

**示例:**

403
```ts
Z
zengyawen 已提交
404 405 406 407 408 409
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.forEach((value, index) => {
410
  console.log("value: " + value, index);
Z
zengyawen 已提交
411 412 413 414
});

```

L
linhaoran 已提交
415
### sort
416

Z
zengyawen 已提交
417 418
sort(comparator: (firstValue: T, secondValue: T) => number): void

L
linhaoran 已提交
419 420
对List中的元素进行一个排序操作。

Z
zengyawen 已提交
421 422
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| comparator | function | 是 | 回调函数。 |

comparator的参数说明:

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| firstValue | T | 是 | 前一项元素。 |
| secondValue | T | 是 | 后一项元素。 |

**示例:**

438
```ts
Z
zengyawen 已提交
439 440 441 442 443
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
444 445
list.sort((a: number, b: number) => a - b);
list.sort((a: number, b: number) => b - a);
Z
zengyawen 已提交
446 447
```

L
linhaoran 已提交
448
### getSubList
449

Z
zengyawen 已提交
450 451 452 453
getSubList(fromIndex: number, toIndex: number): List&lt;T&gt;

根据下标截取List中的一段元素,并返回这一段List实例,包括起始值但不包括终止值。

Z
zengyawen 已提交
454 455
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
456 457 458 459 460 461 462 463 464 465 466
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| fromIndex | number | 是 | 起始下标。 |
| toIndex | number | 是 | 终止下标。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
467
| List&lt;T&gt; | 返回List对象实例。 |
Z
zengyawen 已提交
468 469 470

**示例:**

471
```ts
Z
zengyawen 已提交
472 473 474 475 476
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
477 478 479
let result = list.getSubList(2, 4);
let result1 = list.getSubList(4, 3);
let result2 = list.getSubList(2, 6);
Z
zengyawen 已提交
480
```
L
linhaoran 已提交
481 482

### clear
483

Z
zengyawen 已提交
484 485 486 487
clear(): void

清除List中的所有元素,并把length置为0。

Z
zengyawen 已提交
488 489
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
490 491
**示例:**

492
```ts
Z
zengyawen 已提交
493 494 495 496 497 498 499 500
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.clear();
```

L
linhaoran 已提交
501
### set
502

503
set(index: number, element: T): T
504

L
linhaoran 已提交
505 506
将此 List 中指定位置的元素替换为指定元素。

Z
zengyawen 已提交
507 508
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
509 510 511 512 513 514 515
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| index | number | 是 | 查找的下标值。 |
| element | T | 是 | 用来替换的元素。 |

516 517 518 519 520 521
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回替换后的元素 |

Z
zengyawen 已提交
522 523
**示例:**

524
```ts
Z
zengyawen 已提交
525 526 527 528 529 530 531 532 533
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
list.set(2, "b");

```

L
linhaoran 已提交
534
### convertToArray
535

Z
zengyawen 已提交
536 537 538 539
convertToArray(): Array&lt;T&gt;

把当前List实例转换成数组,并返回转换后的数组。

Z
zengyawen 已提交
540 541
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
542 543 544 545 546 547 548 549
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| Array&lt;T&gt; | 返回转换后的数组。 |

**示例:**

550
```ts
Z
zengyawen 已提交
551 552 553 554 555
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
556
let result = list.convertToArray();
Z
zengyawen 已提交
557 558
```

L
linhaoran 已提交
559
### isEmpty
560

Z
zengyawen 已提交
561
isEmpty(): boolean
L
linhaoran 已提交
562 563 564

判断该List是否为空。

Z
zengyawen 已提交
565 566
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
567 568 569 570 571 572 573 574
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 为空返回true,不为空返回false。 |

**示例:**

575
```ts
Z
zengyawen 已提交
576 577 578 579 580
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);
581
let result = list.isEmpty();
Z
zengyawen 已提交
582 583
```

L
linhaoran 已提交
584 585
### getFirst

Z
zengyawen 已提交
586
getFirst(): T
W
wusongqing 已提交
587

L
linhaoran 已提交
588 589
获取List实例中的第一个元素。

Z
zengyawen 已提交
590 591
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
592 593 594 595 596 597 598 599
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回实例的第一个元素。 |

**示例:**

600
```ts
601
let list = new List();
Z
zengyawen 已提交
602 603 604 605
list.add(2);
list.add(4);
list.add(5);
list.add(4);
606
let result = list.getFirst();
Z
zengyawen 已提交
607 608
```

L
linhaoran 已提交
609 610
### getLast

Z
zengyawen 已提交
611
getLast(): T
W
wusongqing 已提交
612

L
linhaoran 已提交
613 614
获取List实例中的最后一个元素。

Z
zengyawen 已提交
615 616
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
617
**返回值:**
L
linhaoran 已提交
618

Z
zengyawen 已提交
619 620 621
| 类型 | 说明 |
| -------- | -------- |
| T | 返回实例的最后一个元素。 |
L
linhaoran 已提交
622

Z
zengyawen 已提交
623 624
**示例:**

625
```ts
626
let list = new List();
Z
zengyawen 已提交
627 628 629 630
list.add(2);
list.add(4);
list.add(5);
list.add(4);
631
let result = list.getLast();
Z
zengyawen 已提交
632
```
L
linhaoran 已提交
633 634 635

### [Symbol.iterator]

636
[Symbol.iterator]\(): IterableIterator&lt;T&gt;
L
linhaoran 已提交
637

Z
zengyawen 已提交
638
返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
L
linhaoran 已提交
639

Z
zengyawen 已提交
640 641
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
642
**返回值:**
L
linhaoran 已提交
643

Z
zengyawen 已提交
644 645 646
| 类型 | 说明 |
| -------- | -------- |
| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
L
linhaoran 已提交
647

Z
zengyawen 已提交
648
**示例:**
L
linhaoran 已提交
649

650
```ts
Z
zengyawen 已提交
651 652 653 654 655 656 657 658
let list = new List();
list.add(2);
list.add(4);
list.add(5);
list.add(4);

// 使用方法一:
for (let item of list) { 
659
  console.log("value: " + item); 
Z
zengyawen 已提交
660 661 662 663 664 665
}

// 使用方法二:
let iter = list[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
666
  console.log("value: " + temp);
Z
zengyawen 已提交
667 668 669
  temp = iter.next().value;
}
```