js-apis-hashmap.md 9.7 KB
Newer Older
L
linhaoran 已提交
1 2 3 4 5
# 非线性容器HashMap 

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

6 7 8 9 10 11 12
HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value。

HashMap和[TreeMap](js-apis-treemap.md)相比,HashMap依据键的hashCode存取数据,访问速度较快。而TreeMap是有序存取,效率较低。

[HashSet](js-apis-hashset.md)基于HashMap实现。HashMap的输入参数由key、value两个值组成。在HashSet中,只对value对象进行处理。

**推荐使用场景:** 需要快速存取、删除以及插入键值对数据时,推荐使用HashMap。
L
linhaoran 已提交
13 14 15

## 导入模块

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

## HashMap

### 属性

Z
zengyawen 已提交
24 25
**系统能力:** SystemCapability.Utils.Lang

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


### constructor

Z
zengyawen 已提交
33
constructor()
L
linhaoran 已提交
34 35 36

HashMap的构造函数。

Z
zengyawen 已提交
37 38
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
39 40
**示例:**

41
```ts
Z
zengyawen 已提交
42 43
let hashMap = new HashMap();
```
L
linhaoran 已提交
44 45 46 47


### isEmpty

Z
zengyawen 已提交
48
isEmpty(): boolean
L
linhaoran 已提交
49 50 51

判断该HashMap是否为空。

Z
zengyawen 已提交
52 53
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
54
**返回值:**
L
linhaoran 已提交
55

Z
zengyawen 已提交
56 57 58 59 60 61
| 类型 | 说明 |
| -------- | -------- |
| boolean | 为空返回true,不为空返回false。 |

**示例:**

62
```ts
Z
zengyawen 已提交
63
const hashMap = new HashMap();
64
let result = hashMap.isEmpty();
Z
zengyawen 已提交
65
```
L
linhaoran 已提交
66 67 68 69


### hasKey

Z
zengyawen 已提交
70
hasKey(key: K): boolean
L
linhaoran 已提交
71 72 73

判断此HashMap中是否含有该指定key。

Z
zengyawen 已提交
74 75
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
76 77 78 79 80
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| key | K | 是 | 指定Key。 |
L
linhaoran 已提交
81

Z
zengyawen 已提交
82
**返回值:**
L
linhaoran 已提交
83

Z
zengyawen 已提交
84 85 86 87 88 89
| 类型 | 说明 |
| -------- | -------- |
| boolean | 包含指定Key返回true,否则返回false。 |

**示例:**

90
```ts
Z
zengyawen 已提交
91
let hashMap = new HashMap();
92
let result = hashMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf");
Z
zengyawen 已提交
93
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
94
let result1 = hashMap.hasKey("Ahfbrgrbgnutfodgorrogorgrogofdfdf");
Z
zengyawen 已提交
95
```
L
linhaoran 已提交
96 97 98 99


### hasValue

Z
zengyawen 已提交
100
hasValue(value: V): boolean
L
linhaoran 已提交
101 102 103

判断此HashMap中是否含有该指定value。

Z
zengyawen 已提交
104 105
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
106 107 108 109 110
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | V | 是 | 指定value。 |
L
linhaoran 已提交
111

Z
zengyawen 已提交
112
**返回值:**
L
linhaoran 已提交
113

Z
zengyawen 已提交
114 115 116 117 118 119
| 类型 | 说明 |
| -------- | -------- |
| boolean | 包含指定value返回true,否则返回false。 |

**示例:**

120
```ts
Z
zengyawen 已提交
121
let hashMap = new HashMap();
122
let result = hashMap.hasValue(123);
Z
zengyawen 已提交
123
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
124
let result1 = hashMap.hasValue(123);
Z
zengyawen 已提交
125
```
L
linhaoran 已提交
126 127 128 129


### get

Z
zengyawen 已提交
130
get(key: K): V
L
linhaoran 已提交
131 132 133

获取指定key所对应的value。

Z
zengyawen 已提交
134 135
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
136
**参数:**
L
linhaoran 已提交
137

Z
zengyawen 已提交
138 139 140
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| key | K | 是 | 查找的指定key。 |
L
linhaoran 已提交
141

Z
zengyawen 已提交
142 143 144 145 146 147 148 149
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| V | 返回key映射的value值。 |

**示例:**

150
```ts
Z
zengyawen 已提交
151 152 153
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
154
let result = hashMap.get("sdfs");
Z
zengyawen 已提交
155
```
L
linhaoran 已提交
156 157 158 159


### setAll

Z
zengyawen 已提交
160
setAll(map: HashMap<K, V>): void
L
linhaoran 已提交
161

162
将一个HashMap中的所有元素组添加到另一个hashMap中。
L
linhaoran 已提交
163

Z
zengyawen 已提交
164 165
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
166
**参数:**
L
linhaoran 已提交
167

Z
zengyawen 已提交
168 169
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
170
| map | HashMap<K, V> | 是 | 被添加元素的hashMap。 |
Z
zengyawen 已提交
171 172 173

**示例:**

174
```ts
Z
zengyawen 已提交
175 176 177 178 179 180
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
let newHashMap = new HashMap();
hashMap.setAll(newHashMap);
```
L
linhaoran 已提交
181 182 183 184


### set

Z
zengyawen 已提交
185
set(key: K, value: V): Object
L
linhaoran 已提交
186 187 188

向HashMap中添加一组数据。

Z
zengyawen 已提交
189 190
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
191
**参数:**
L
linhaoran 已提交
192

Z
zengyawen 已提交
193 194 195 196
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| key | K | 是 | 添加成员数据的键名。 |
| value | V | 是 | 添加成员数据的值。 |
L
linhaoran 已提交
197

Z
zengyawen 已提交
198 199 200 201
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
202
| Object | 返回添加后的hashMap。 |
Z
zengyawen 已提交
203 204 205

**示例:**

206
```ts
Z
zengyawen 已提交
207
let hashMap = new HashMap();
208
let result = hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
Z
zengyawen 已提交
209
```
L
linhaoran 已提交
210 211 212 213


### remove

Z
zengyawen 已提交
214
remove(key: K): V
L
linhaoran 已提交
215

216
删除指定key所对应元素。
L
linhaoran 已提交
217

Z
zengyawen 已提交
218 219
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
220 221 222 223
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
224
| key | K | 是 | 指定key。 |
L
linhaoran 已提交
225

Z
zengyawen 已提交
226
**返回值:**
L
linhaoran 已提交
227

Z
zengyawen 已提交
228 229 230 231 232 233
| 类型 | 说明 |
| -------- | -------- |
| V | 返回删除元素的值。 |

**示例:**

234
```ts
Z
zengyawen 已提交
235 236 237
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
238
let result = hashMap.remove("sdfs");
Z
zengyawen 已提交
239
```
L
linhaoran 已提交
240 241 242 243


### clear

Z
zengyawen 已提交
244
clear(): void
L
linhaoran 已提交
245 246 247

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

Z
zengyawen 已提交
248 249
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
250 251
**示例:**

252
```ts
Z
zengyawen 已提交
253 254 255 256 257
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
hashMap.clear();
```
L
linhaoran 已提交
258 259 260 261


### keys

Z
zengyawen 已提交
262
keys(): IterableIterator&lt;K&gt;
L
linhaoran 已提交
263

264
返回包含此映射中包含的键名的新迭代器对象。
L
linhaoran 已提交
265

Z
zengyawen 已提交
266 267
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
268 269 270 271 272 273 274 275
**返回值:**

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

**示例:**

276
```ts
Z
zengyawen 已提交
277 278 279 280 281 282
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
let iter = hashMap.keys();
let temp = iter.next().value;
while(temp != undefined) {
283
  console.log("value:" + temp);
Z
zengyawen 已提交
284 285 286
  temp = iter.next().value;
}
```
L
linhaoran 已提交
287 288 289 290


### values

Z
zengyawen 已提交
291
values(): IterableIterator&lt;V&gt;
L
linhaoran 已提交
292

W
wusongqing 已提交
293
返回包含此映射中包含的键值的新迭代器对象。
L
linhaoran 已提交
294

Z
zengyawen 已提交
295 296
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
297 298 299 300 301 302 303 304
**返回值:**

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

**示例:**

305
```ts
Z
zengyawen 已提交
306 307 308 309 310 311
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
let iter = hashMap.values();
let temp = iter.next().value;
while(temp != undefined) {
312
  console.log("value:" + temp);
Z
zengyawen 已提交
313 314 315
  temp = iter.next().value;
}
```
L
linhaoran 已提交
316 317 318 319


### replace

320
replace(key: K, newValue: V): boolean
L
linhaoran 已提交
321 322 323

对HashMap中一组数据进行更新(替换)。

Z
zengyawen 已提交
324 325
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
326 327 328 329 330
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| key | K | 是 | 依据key指定替换的元素。 |
331
| newValue | V | 是 | 替换成员数据的值。 |
Z
zengyawen 已提交
332 333

**返回值:**
L
linhaoran 已提交
334

Z
zengyawen 已提交
335 336 337
| 类型 | 说明 |
| -------- | -------- |
| boolean | 是否成功对已有数据进行替换 |
L
linhaoran 已提交
338

Z
zengyawen 已提交
339 340
**示例:**

341
```ts
Z
zengyawen 已提交
342 343
let hashMap = new HashMap();
hashMap.set("sdfs", 123);
344
let result = hashMap.replace("sdfs", 357);
Z
zengyawen 已提交
345
```
L
linhaoran 已提交
346 347 348 349


### forEach

350
forEach(callbackfn: (value?: V, key?: K, map?: HashMap<K, V>) => void, thisArg?: Object): void
L
linhaoran 已提交
351 352 353

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

Z
zengyawen 已提交
354 355
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
356 357 358 359 360 361 362 363 364 365
**参数:**

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

callbackfn的参数说明:
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
366 367
| value | V | 否 | 当前遍历到的元素键值对的值。 |
| key | K | 否 | 当前遍历到的元素键值对的键。 |
368
| map | HashMap<K, V> | 否 | 当前调用forEach方法的实例对象。 |
Z
zengyawen 已提交
369 370 371

**示例:**

372
```ts
Z
zengyawen 已提交
373 374 375 376
let hashMap = new HashMap();
hashMap.set("sdfs", 123);
hashMap.set("dfsghsf", 357);
hashMap.forEach((value, key) => {
377
  console.log("value:" + value, key);
Z
zengyawen 已提交
378 379
});
```
L
linhaoran 已提交
380 381 382 383


### entries

384
entries(): IterableIterator&lt;[K, V]&gt;
L
linhaoran 已提交
385

386
返回包含此映射中包含的键值对的新迭代器对象。
L
linhaoran 已提交
387

Z
zengyawen 已提交
388 389
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
390 391 392 393
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
394
| IterableIterator&lt;[K, V]&gt; | 返回一个迭代器。 |
Z
zengyawen 已提交
395 396 397

**示例:**

398
```ts
Z
zengyawen 已提交
399 400 401 402 403 404
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);
let iter = hashMap.entries();
let temp = iter.next().value;
while(temp != undefined) {
405 406
  console.log("key:" + temp[0]);
  console.log("value:" + temp[1]);
Z
zengyawen 已提交
407 408 409
  temp = iter.next().value;
}
```
L
linhaoran 已提交
410 411 412 413


### [Symbol.iterator]

Z
zengyawen 已提交
414
[Symbol.iterator]\(): IterableIterator&lt;[K, V]&gt;
L
linhaoran 已提交
415 416 417

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

Z
zengyawen 已提交
418 419
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
420 421 422 423
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
424
| IterableIterator&lt;[K, V]&gt; | 返回一个迭代器。 |
Z
zengyawen 已提交
425 426

**示例:**
427
```ts
Z
zengyawen 已提交
428 429 430 431 432 433
let hashMap = new HashMap();
hashMap.set("Ahfbrgrbgnutfodgorrogorgrogofdfdf", 123);
hashMap.set("sdfs", 356);

// 使用方法一:
for (let item of hashMap) { 
434 435
  console.log("key:" + item[0]);
  console.log("value:" + item[1]);
Z
zengyawen 已提交
436 437 438 439 440 441
}

// 使用方法二:
let iter = hashMap[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
442 443
  console.log("key:" + temp[0]);
  console.log("value:" + temp[1]);
Z
zengyawen 已提交
444 445 446
  temp = iter.next().value;
}
```