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