• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.util.HashMap (非线性容器HashMap)
2
3HashMap底层使用数组+链表+红黑树的方式实现,查询、插入和删除的效率都很高。HashMap存储内容基于key-value的键值对映射,不能有重复的key,且一个key只能对应一个value。
4
5HashMap和[TreeMap](js-apis-treemap.md)相比,HashMap依据键的hashCode存取数据,访问速度较快。而TreeMap是有序存取,效率较低。
6
7[HashSet](js-apis-hashset.md)基于HashMap实现。HashMap的输入参数由key、value两个值组成。在HashSet中,只对value对象进行处理。
8
9**推荐使用场景:** 需要快速存取、删除以及插入键值对数据时,推荐使用HashMap。
10
11文档中存在泛型的使用,涉及以下泛型标记符:<br>
12- K:Key,键<br>
13- V:Value,值
14
15> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
16>
17> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
18
19
20## 导入模块
21
22```ts
23import HashMap from '@ohos.util.HashMap';
24```
25
26## HashMap
27
28### 属性
29
30**系统能力:** SystemCapability.Utils.Lang
31
32| 名称 | 类型 | 可读 | 可写 | 说明 |
33| -------- | -------- | -------- | -------- | -------- |
34| length | number | 是 | 否 | HashMap的元素个数。 |
35
36
37### constructor
38
39constructor()
40
41HashMap的构造函数。
42
43**系统能力:** SystemCapability.Utils.Lang
44
45**错误码:**
46
47以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
48
49| 错误码ID | 错误信息 |
50| -------- | -------- |
51| 10200012 | The HashMap's constructor cannot be directly invoked. |
52
53**示例:**
54
55```ts
56let hashMap = new HashMap();
57```
58
59
60### isEmpty
61
62isEmpty(): boolean
63
64判断该HashMap是否为空。
65
66**系统能力:** SystemCapability.Utils.Lang
67
68**返回值:**
69
70| 类型 | 说明 |
71| -------- | -------- |
72| boolean | 为空返回true,不为空返回false。 |
73
74**错误码:**
75
76以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
77
78| 错误码ID | 错误信息 |
79| -------- | -------- |
80| 10200011 | The isEmpty method cannot be bound. |
81
82**示例:**
83
84```ts
85const hashMap = new HashMap();
86let result = hashMap.isEmpty();
87```
88
89
90### hasKey
91
92hasKey(key: K): boolean
93
94判断此HashMap中是否含有该指定key。
95
96**系统能力:** SystemCapability.Utils.Lang
97
98**参数:**
99
100| 参数名 | 类型 | 必填 | 说明 |
101| -------- | -------- | -------- | -------- |
102| key | K | 是 | 指定Key。 |
103
104**返回值:**
105
106| 类型 | 说明 |
107| -------- | -------- |
108| boolean | 包含指定Key返回true,否则返回false。 |
109
110**错误码:**
111
112以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
113
114| 错误码ID | 错误信息 |
115| -------- | -------- |
116| 10200011 | The hasKey method cannot be bound. |
117
118**示例:**
119
120```ts
121let hashMap = new HashMap();
122hashMap.set("squirrel", 123);
123let result = hashMap.hasKey("squirrel");
124```
125
126
127### hasValue
128
129hasValue(value: V): boolean
130
131判断此HashMap中是否含有该指定value。
132
133**系统能力:** SystemCapability.Utils.Lang
134
135**参数:**
136
137| 参数名 | 类型 | 必填 | 说明 |
138| -------- | -------- | -------- | -------- |
139| value | V | 是 | 指定value。 |
140
141**返回值:**
142
143| 类型 | 说明 |
144| -------- | -------- |
145| boolean | 包含指定value返回true,否则返回false。 |
146
147**错误码:**
148
149以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
150
151| 错误码ID | 错误信息 |
152| -------- | -------- |
153| 10200011 | The hasValue method cannot be bound. |
154
155**示例:**
156
157```ts
158let hashMap = new HashMap();
159hashMap.set("squirrel", 123);
160let result = hashMap.hasValue(123);
161```
162
163
164### get
165
166get(key: K): V
167
168获取指定key所对应的value。
169
170**系统能力:** SystemCapability.Utils.Lang
171
172**参数:**
173
174| 参数名 | 类型 | 必填 | 说明 |
175| -------- | -------- | -------- | -------- |
176| key | K | 是 | 查找的指定key。 |
177
178**返回值:**
179
180| 类型 | 说明 |
181| -------- | -------- |
182| V | 返回key映射的value值。 |
183
184**错误码:**
185
186以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
187
188| 错误码ID | 错误信息 |
189| -------- | -------- |
190| 10200011 | The get method cannot be bound. |
191
192**示例:**
193
194```ts
195let hashMap = new HashMap();
196hashMap.set("squirrel", 123);
197hashMap.set("sparrow", 356);
198let result = hashMap.get("sparrow");
199```
200
201
202### setAll
203
204setAll(map: HashMap<K, V>): void
205
206将一个HashMap中的所有元素组添加到另一个hashMap中。
207
208**系统能力:** SystemCapability.Utils.Lang
209
210**参数:**
211
212| 参数名 | 类型 | 必填 | 说明 |
213| -------- | -------- | -------- | -------- |
214| map | HashMap<K, V> | 是 | 被添加元素的hashMap。 |
215
216**错误码:**
217
218以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
219
220| 错误码ID | 错误信息 |
221| -------- | -------- |
222| 10200011 | The setAll method cannot be bound. |
223
224**示例:**
225
226```ts
227let hashMap = new HashMap();
228hashMap.set("squirrel", 123);
229hashMap.set("sparrow", 356);
230let newHashMap = new HashMap();
231newHashMap.set("newMap", 99);
232hashMap.setAll(newHashMap);
233```
234
235
236### set
237
238set(key: K, value: V): Object
239
240向HashMap中添加一组数据。
241
242**系统能力:** SystemCapability.Utils.Lang
243
244**参数:**
245
246| 参数名 | 类型 | 必填 | 说明 |
247| -------- | -------- | -------- | -------- |
248| key | K | 是 | 添加成员数据的键名。 |
249| value | V | 是 | 添加成员数据的值。 |
250
251**返回值:**
252
253| 类型 | 说明 |
254| -------- | -------- |
255| Object | 返回添加后的hashMap。 |
256
257**错误码:**
258
259以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
260
261| 错误码ID | 错误信息 |
262| -------- | -------- |
263| 10200011 | The set method cannot be bound. |
264
265**示例:**
266
267```ts
268let hashMap = new HashMap();
269let result = hashMap.set("squirrel", 123);
270```
271
272
273### remove
274
275remove(key: K): V
276
277删除指定key所对应元素。
278
279**系统能力:** SystemCapability.Utils.Lang
280
281**参数:**
282
283| 参数名 | 类型 | 必填 | 说明 |
284| -------- | -------- | -------- | -------- |
285| key | K | 是 | 指定key。 |
286
287**返回值:**
288
289| 类型 | 说明 |
290| -------- | -------- |
291| V | 返回删除元素的值。 |
292
293**错误码:**
294
295以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
296
297| 错误码ID | 错误信息 |
298| -------- | -------- |
299| 10200011 | The remove method cannot be bound. |
300
301**示例:**
302
303```ts
304let hashMap = new HashMap();
305hashMap.set("squirrel", 123);
306hashMap.set("sparrow", 356);
307let result = hashMap.remove("sparrow");
308```
309
310
311### clear
312
313clear(): void
314
315清除HashMap中的所有元素,并把length置为0。
316
317**系统能力:** SystemCapability.Utils.Lang
318
319**错误码:**
320
321以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
322
323| 错误码ID | 错误信息 |
324| -------- | -------- |
325| 10200011 | The clear method cannot be bound. |
326
327**示例:**
328
329```ts
330let hashMap = new HashMap();
331hashMap.set("squirrel", 123);
332hashMap.set("sparrow", 356);
333hashMap.clear();
334```
335
336
337### keys
338
339keys(): IterableIterator&lt;K&gt;
340
341返回包含此映射中包含的键的新迭代器对象。
342
343**系统能力:** SystemCapability.Utils.Lang
344
345**返回值:**
346
347| 类型 | 说明 |
348| -------- | -------- |
349| IterableIterator&lt;K&gt; | 返回一个迭代器。 |
350
351**错误码:**
352
353以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
354
355| 错误码ID | 错误信息 |
356| -------- | -------- |
357| 10200011 | The keys method cannot be bound. |
358
359**示例:**
360
361```ts
362let hashMap = new HashMap();
363hashMap.set("squirrel", 123);
364hashMap.set("sparrow", 356);
365let iter = hashMap.keys();
366let temp = iter.next().value;
367while(temp != undefined) {
368  console.log("value:" + temp);
369  temp = iter.next().value;
370}
371```
372
373
374### values
375
376values(): IterableIterator&lt;V&gt;
377
378返回包含此映射中包含的键值的新迭代器对象。
379
380**系统能力:** SystemCapability.Utils.Lang
381
382**返回值:**
383
384| 类型 | 说明 |
385| -------- | -------- |
386| IterableIterator&lt;V&gt; | 返回一个迭代器。 |
387
388**错误码:**
389
390以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
391
392| 错误码ID | 错误信息 |
393| -------- | -------- |
394| 10200011 | The values method cannot be bound. |
395
396**示例:**
397
398```ts
399let hashMap = new HashMap();
400hashMap.set("squirrel", 123);
401hashMap.set("sparrow", 356);
402let iter = hashMap.values();
403let temp = iter.next().value;
404while(temp != undefined) {
405  console.log("value:" + temp);
406  temp = iter.next().value;
407}
408```
409
410
411### replace
412
413replace(key: K, newValue: V): boolean
414
415对HashMap中一组数据进行更新(替换)。
416
417**系统能力:** SystemCapability.Utils.Lang
418
419**参数:**
420
421| 参数名 | 类型 | 必填 | 说明 |
422| -------- | -------- | -------- | -------- |
423| key | K | 是 | 依据key指定替换的元素。 |
424| newValue | V | 是 | 替换成员数据的值。 |
425
426**返回值:**
427
428| 类型 | 说明 |
429| -------- | -------- |
430| boolean | 是否成功对已有数据进行替换 |
431
432**错误码:**
433
434以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
435
436| 错误码ID | 错误信息 |
437| -------- | -------- |
438| 10200011 | The replace method cannot be bound. |
439
440**示例:**
441
442```ts
443let hashMap = new HashMap();
444hashMap.set("sparrow", 123);
445let result = hashMap.replace("sparrow", 357);
446```
447
448
449### forEach
450
451forEach(callbackFn: (value?: V, key?: K, map?: HashMap<K, V>) => void, thisArg?: Object): void
452
453通过回调函数来遍历HashMap实例对象上的元素以及元素对应的下标。
454
455**系统能力:** SystemCapability.Utils.Lang
456
457**参数:**
458
459| 参数名 | 类型 | 必填 | 说明 |
460| -------- | -------- | -------- | -------- |
461| callbackFn | function | 是 | 回调函数。 |
462| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
463
464callbackfn的参数说明:
465| 参数名 | 类型 | 必填 | 说明 |
466| -------- | -------- | -------- | -------- |
467| value | V | 否 | 当前遍历到的元素键值对的值。 |
468| key | K | 否 | 当前遍历到的元素键值对的键。 |
469| map | HashMap<K, V> | 否 | 当前调用forEach方法的实例对象。 |
470
471**错误码:**
472
473以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
474
475| 错误码ID | 错误信息 |
476| -------- | -------- |
477| 10200011 | The forEach method cannot be bound. |
478
479**示例:**
480
481```ts
482let hashMap = new HashMap();
483hashMap.set("sparrow", 123);
484hashMap.set("gull", 357);
485hashMap.forEach((value, key) => {
486    console.log("value:" + value, "key:" + key);
487});
488```
489
490
491### entries
492
493entries(): IterableIterator&lt;[K, V]&gt;
494
495返回包含此映射中包含的键值对的新迭代器对象。
496
497**系统能力:** SystemCapability.Utils.Lang
498
499**返回值:**
500
501| 类型 | 说明 |
502| -------- | -------- |
503| IterableIterator&lt;[K, V]&gt; | 返回一个迭代器。 |
504
505**错误码:**
506
507以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
508
509| 错误码ID | 错误信息 |
510| -------- | -------- |
511| 10200011 | The entries method cannot be bound. |
512
513**示例:**
514
515```ts
516let hashMap = new HashMap();
517hashMap.set("squirrel", 123);
518hashMap.set("sparrow", 356);
519let iter = hashMap.entries();
520let temp = iter.next().value;
521while(temp != undefined) {
522  console.log("key:" + temp[0]);
523  console.log("value:" + temp[1]);
524  temp = iter.next().value;
525}
526```
527
528
529### [Symbol.iterator]
530
531[Symbol.iterator]\(): IterableIterator&lt;[K, V]&gt;
532
533返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
534
535**系统能力:** SystemCapability.Utils.Lang
536
537**返回值:**
538
539| 类型 | 说明 |
540| -------- | -------- |
541| IterableIterator&lt;[K, V]&gt; | 返回一个迭代器。 |
542
543**错误码:**
544
545以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
546
547| 错误码ID | 错误信息 |
548| -------- | -------- |
549| 10200011 | The Symbol.iterator method cannot be bound. |
550
551**示例:**
552```ts
553let hashMap = new HashMap();
554hashMap.set("squirrel", 123);
555hashMap.set("sparrow", 356);
556
557// 使用方法一:
558for (let item of hashMap) {
559  console.log("key:" + item[0]);
560  console.log("value:" + item[1]);
561}
562
563// 使用方法二:
564let iter = hashMap[Symbol.iterator]();
565let temp = iter.next().value;
566while(temp != undefined) {
567  console.log("key:" + temp[0]);
568  console.log("value:" + temp[1]);
569  temp = iter.next().value;
570}
571```