js-apis-arraylist.md 14.1 KB
Newer Older
L
linhaoran 已提交
1 2 3 4 5
# 线性容器ArrayList

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

6 7 8 9 10 11 12 13
ArrayList是一种线性数据结构,底层基于数组实现。ArrayList会根据实际需要动态调整容量,每次扩容增加50%。

ArrayList和[Vector](js-apis-vector.md)相似,都是基于数组实现。它们都可以动态调整容量,但Vector每次扩容增加1倍。

ArrayList和[LinkedList](js-apis-linkedlist.md)相比,ArrayList的随机访问效率更高。但由于ArrayList的增删操作会影响数组内其他元素的移动,LinkedList的增加和删除操作效率更高。

**推荐使用场景:** 当需要频繁读取集合中的元素时,推荐使用ArrayList。

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

L
linhaoran 已提交
17 18
## 导入模块

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

## ArrayList

### 属性

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

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


### constructor

Z
zengyawen 已提交
36
constructor()
L
linhaoran 已提交
37 38 39

ArrayList的构造函数。

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

Z
zengyawen 已提交
42 43
**示例:**

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


### add

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

在ArrayList尾部插入元素。

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 73 74 75 76
  let arrayList = new ArrayList();
  let result = arrayList.add("a");
  let result1 = arrayList.add(1);
  let b = [1, 2, 3];
  let result2 = arrayList.add(b);
L
lengchangjing 已提交
77
  let c = {name: "Dylon", age: "13"};
78 79
  let result3 = arrayList.add(false);
  ```
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 95 96
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 被插入的元素。 |
| index | number | 是 | 被插入的位置索引。 |

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

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

### has

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

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

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

Z
zengyawen 已提交
113
**参数:**
L
linhaoran 已提交
114

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

Z
zengyawen 已提交
119 120 121 122 123 124 125 126
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 返回true表示包含指定元素,否则返回false。 |

**示例:**

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

### getIndexOf

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

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

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

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

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

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回指定元素第一次出现时的下标值,查找失败返回-1。 |

**示例:**

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

L
linhaoran 已提交
168 169
### getLastIndexOf

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

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

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

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

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

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回指定元素最后一次出现时的下标值,查找失败返回-1。 |

**示例:**

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

L
linhaoran 已提交
202 203
### removeByIndex

Z
zengyawen 已提交
204
removeByIndex(index: number): T
L
linhaoran 已提交
205 206 207

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

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

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

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

**返回值:**

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

**示例:**

224
```ts
Z
zengyawen 已提交
225 226 227 228 229 230
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(2);
arrayList.add(4);
231
let result = arrayList.removeByIndex(2);
Z
zengyawen 已提交
232
```
L
linhaoran 已提交
233 234 235

### remove

Z
zengyawen 已提交
236
remove(element: T): boolean
L
linhaoran 已提交
237 238 239

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

Z
zengyawen 已提交
240 241
**系统能力:** SystemCapability.Utils.Lang

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

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

**返回值:**

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

**示例:**

256
```ts
Z
zengyawen 已提交
257 258 259 260 261
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
262
let result = arrayList.remove(2);
Z
zengyawen 已提交
263
```
L
linhaoran 已提交
264 265 266

### removeByRange

Z
zengyawen 已提交
267
removeByRange(fromIndex: number, toIndex: number): void
L
linhaoran 已提交
268 269 270

从一段范围内删除元素,包括起始值但不包括终止值。

Z
zengyawen 已提交
271 272
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
273 274 275 276 277 278 279 280 281
**参数:**

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

**示例:**

282
```ts
Z
zengyawen 已提交
283 284 285 286 287 288 289 290 291 292
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
arrayList.removeByRange(2, 4);
arrayList.removeByRange(4, 3);
arrayList.removeByRange(2, 6);
```

L
linhaoran 已提交
293
### replaceAllElements
294

295
replaceAllElements(callbackfn: (value: T, index?: number, arrlist?: ArrayList&lt;T&gt;) => T,
Z
zengyawen 已提交
296 297 298 299
thisArg?: Object): void

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

Z
zengyawen 已提交
300 301
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
302 303 304 305 306 307 308 309 310 311 312
**参数:**

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

callbackfn的参数说明:

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
313 314 315
| value | T | 是 | 当前遍历到的元素。 |
| index | number | 否 | 当前遍历到的下标值。 |
| arrlist | ArrayList&lt;T&gt; | 否 | 当前调用replaceAllElements方法的实例对象。 |
Z
zengyawen 已提交
316 317 318

**示例:**

319
```ts
Z
zengyawen 已提交
320 321 322 323 324
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
325
arrayList.replaceAllElements((value: number, index: number)=> {
Z
zengyawen 已提交
326 327
  return value = 2 * value;
});
328
arrayList.replaceAllElements((value: number, index: number) => {
Z
zengyawen 已提交
329 330 331 332
  return value = value - 2;
});
```

L
linhaoran 已提交
333
### forEach
334

335
forEach(callbackfn: (value: T, index?: number, arrlist?: ArrayList&lt;T&gt;) => void,
Z
zengyawen 已提交
336
thisArg?: Object): void
L
linhaoran 已提交
337 338 339

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

Z
zengyawen 已提交
340 341
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
342 343 344 345 346 347 348 349 350 351 352 353 354
**参数:**

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

callbackfn的参数说明:

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

**示例:**

359
```ts
Z
zengyawen 已提交
360 361 362 363 364 365
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
arrayList.forEach((value, index) => {
L
lengchangjing 已提交
366
  console.log(`value:${value}`, index);
Z
zengyawen 已提交
367 368 369
});
```

L
linhaoran 已提交
370
### sort
371

Z
zengyawen 已提交
372 373 374 375
sort(comparator?: (firstValue: T, secondValue: T) => number): void

对ArrayList中的元素排序。

Z
zengyawen 已提交
376 377
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
**参数:**

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

comparator的参数说明:

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

**示例:**

393
```ts
Z
zengyawen 已提交
394 395 396 397 398
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
399 400
arrayList.sort((a: number, b: number) => a - b);
arrayList.sort((a: number, b: number) => b - a);
Z
zengyawen 已提交
401 402 403
arrayList.sort();
```

L
linhaoran 已提交
404
### subArrayList
405

Z
zengyawen 已提交
406 407 408 409
subArrayList(fromIndex: number, toIndex: number): ArrayList&lt;T&gt;

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

Z
zengyawen 已提交
410 411
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
412 413 414 415 416 417 418 419 420 421 422 423 424 425 426
**参数:**

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

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| ArrayList&lt;T&gt; | 返回ArrayList对象实例。 |

**示例:**

427
```ts
Z
zengyawen 已提交
428 429 430 431 432
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
433 434 435
let result1 = arrayList.subArrayList(2, 4);
let result2 = arrayList.subArrayList(4, 3);
let result3 = arrayList.subArrayList(2, 6);
Z
zengyawen 已提交
436
```
L
linhaoran 已提交
437 438

### clear
439

Z
zengyawen 已提交
440 441 442 443
clear(): void

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

Z
zengyawen 已提交
444 445
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
446 447
**示例:**

448
```ts
Z
zengyawen 已提交
449 450 451 452 453 454 455 456
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
arrayList.clear();
```

L
linhaoran 已提交
457
### clone
458

Z
zengyawen 已提交
459 460
clone(): ArrayList&lt;T&gt; 

461 462
克隆一个与ArrayList相同的实例,并返回克隆后的实例。修改克隆后的实例并不会影响原实例。

Z
zengyawen 已提交
463 464
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
465 466 467 468 469 470 471 472 473

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| ArrayList&lt;T&gt; | 返回ArrayList对象实例。 |

**示例:**

474
```ts
Z
zengyawen 已提交
475 476 477 478 479
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
480
let result = arrayList.clone();
Z
zengyawen 已提交
481 482
```

L
linhaoran 已提交
483
### getCapacity
484

Z
zengyawen 已提交
485
getCapacity(): number
L
linhaoran 已提交
486 487 488

获取当前实例的容量大小。

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

Z
zengyawen 已提交
491 492 493 494 495 496 497 498
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 返回arraylist的容量大小。 |

**示例:**

499
```ts
Z
zengyawen 已提交
500 501 502 503 504
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
505
let result = arrayList.getCapacity();
Z
zengyawen 已提交
506 507
```

L
linhaoran 已提交
508
### convertToArray
509

Z
zengyawen 已提交
510 511 512 513
convertToArray(): Array&lt;T&gt;

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

Z
zengyawen 已提交
514 515
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
516 517 518 519 520 521 522 523
**返回值:**

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

**示例:**

524
```ts
Z
zengyawen 已提交
525 526 527 528 529
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
530
let result = arrayList.convertToArray();
Z
zengyawen 已提交
531 532
```

L
linhaoran 已提交
533
### isEmpty
534

Z
zengyawen 已提交
535
isEmpty(): boolean
L
linhaoran 已提交
536 537 538

判断该ArrayList是否为空。

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

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

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

**示例:**

549
```ts
Z
zengyawen 已提交
550 551 552 553 554
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
555
let result = arrayList.isEmpty();
Z
zengyawen 已提交
556 557
```

L
linhaoran 已提交
558
### increaseCapacityTo
559

Z
zengyawen 已提交
560
increaseCapacityTo(newCapacity: number): void
L
linhaoran 已提交
561 562 563

如果传入的新容量大于或等于ArrayList中的元素个数,将容量变更为新容量。

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

Z
zengyawen 已提交
566 567 568 569 570 571 572 573
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| newCapacity | number | 是 | 新容量。 |

**示例:**

574
```ts
Z
zengyawen 已提交
575 576 577 578 579 580 581 582 583
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
arrayList.increaseCapacityTo(2);
arrayList.increaseCapacityTo(8);
```

L
linhaoran 已提交
584
### trimToCurrentLength
585

Z
zengyawen 已提交
586
trimToCurrentLength(): void
L
linhaoran 已提交
587 588 589

把容量限制为当前的length大小。

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

Z
zengyawen 已提交
592 593
**示例:**

594
```ts
Z
zengyawen 已提交
595 596 597 598 599
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);
600
arrayList.trimToCurrentLength();
Z
zengyawen 已提交
601 602
```

L
linhaoran 已提交
603 604
### [Symbol.iterator]

Z
zengyawen 已提交
605 606 607 608
[Symbol.iterator]\(): IterableIterator&lt;T&gt;

返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。

Z
zengyawen 已提交
609 610
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
611 612 613 614 615 616 617 618
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| IterableIterator&lt;T&gt; | 返回一个迭代器。 |

**示例:**

619
```ts
Z
zengyawen 已提交
620 621 622 623 624 625 626 627
let arrayList = new ArrayList();
arrayList.add(2);
arrayList.add(4);
arrayList.add(5);
arrayList.add(4);

// 使用方法一:
for (let item of arrayList) { 
L
lengchangjing 已提交
628
  console.log(`value:${item}`); 
Z
zengyawen 已提交
629 630 631 632 633 634
} 

// 使用方法二:
let iter = arrayList[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
L
lengchangjing 已提交
635
  console.log(`value:${temp}`);
Z
zengyawen 已提交
636 637 638
  temp = iter.next().value;
}
```