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<K> 263 264返回包含此映射中包含的键名的新迭代器对象。 265 266**系统能力:** SystemCapability.Utils.Lang 267 268**返回值:** 269 270| 类型 | 说明 | 271| -------- | -------- | 272| IterableIterator<K> | 返回一个迭代器。 | 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<V> 292 293返回包含此映射中包含的键值的新迭代器对象。 294 295**系统能力:** SystemCapability.Utils.Lang 296 297**返回值:** 298 299| 类型 | 说明 | 300| -------- | -------- | 301| IterableIterator<V> | 返回一个迭代器。 | 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<[K, V]> 385 386返回包含此映射中包含的键值对的新迭代器对象。 387 388**系统能力:** SystemCapability.Utils.Lang 389 390**返回值:** 391 392| 类型 | 说明 | 393| -------- | -------- | 394| IterableIterator<[K, V]> | 返回一个迭代器。 | 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<[K, V]> 415 416返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 417 418**系统能力:** SystemCapability.Utils.Lang 419 420**返回值:** 421 422| 类型 | 说明 | 423| -------- | -------- | 424| IterableIterator<[K, V]> | 返回一个迭代器。 | 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```