温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

在Java中使用HashMap来实现访问的键值对

发布时间:2021-09-30 15:54:04 来源:亿速云 阅读:199 作者:柒染 栏目:web开发

今天就跟大家聊聊有关在Java中使用HashMap来实现访问的键值对,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Map是日常编程中比较常用的数据结构之一。它保留了可以很容易地通过其键来访问的键值对。在Java中,使用HashMap来实现这个目的是很明显的。然而,在JavaScript中,使用一个普通的对象来实现这个目标是非常方便的。

const map = {};  // 插入键值对 map['key1'] = 'value1'; map['key2'] = 'value2'; map['key3'] = 'value3';  // 检查map包含的键 if (map.hasOwnProperty('key1')) {   console.log('Map contains key1'); }  // 通过特定的键获得值 console.log(map['key1']);

但是JavaScript中有一个专门用于此目的的内置数据结构:Map。让我给你一些理由,让你喜欢Map而不是普通的对象。

1.更多键类型

对象只能有符号(symbols)或字符串。Map可以将任何类型的值作为键:对象,函数或基元(primitives)。

const map = new Map(); const myFunction = () => console.log('I am a useful function.'); const myNumber = 666; const myObject = {   name: 'plainObjectValue',   otherKey: 'otherValue' }; map.set(myFunction, 'function as a key'); map.set(myNumber, 'number as a key'); map.set(myObject, 'object as a key');  console.log(map.get(myFunction)); // function as a key console.log(map.get(myNumber)); // number as a key console.log(map.get(myObject)); // object as a key

2.更好地确定大小

Map提供了一个size属性,但一个普通对象的大小却必须通过艰难的方式来确定。确定Map的大小可以在O(1)时间内完成,而确定一个普通对象的大小则需要O(n)步。

const map = new Map(); map.set('someKey1', 1); map.set('someKey2', 1); ... map.set('someKey100', 1);  console.log(map.size) // 100, Runtime: O(1)  const plainObjMap = {}; plainObjMap['someKey1'] = 1; plainObjMap['someKey2'] = 1; ... plainObjMap['someKey100'] = 1;  console.log(Object.keys(plainObjMap).length) // 100, Runtime: O(n)

3.更好的性能

对Map进行了优化,以便频繁地添加和删除条目。

此外,Map的条目数可以在恒定的时间内被检索,而一个普通对象的条目数必须被计算,这需要O(n)时间。

以我的Macbook Pro为例,这是一张有1000万个条目的Map的平均大小确定时间。

  • 普通JS对象: ~1.6 s

  • Map: < 1 ms

此外,它不需要将任何键转换为字符串,这可以节省很多时间。

4.直接迭代

对象必须通过获取键并对其进行迭代。另一方面,Map是可迭代的,这意味着它可以直接迭代。

const map = new Map(); map.set('someKey1', 1); map.set('someKey2', 2); map.set('someKey3', 3);  for (let [key, value] of map) {   console.log(`${key} = ${value}`); } // someKey1 = 1 // someKey2 = 2 // someKey3 = 3  const plainObjMap = {}; plainObjMap['someKey1'] = 1; plainObjMap['someKey2'] = 2; plainObjMap['someKey3'] = 3;  for (let key of Object.keys(plainObjMap)) {   const value = plainObjMap[key];   console.log(`${key} = ${value}`); } // someKey1 = 1 // someKey2 = 2 // someKey3 = 3

5.key顺序

在ECMAScript 2015之前,一个对象的键不保证以任何特定的顺序出现。在Map上迭代保证键按插入顺序出现。

6.无键覆盖

一个普通对象由于其原型已经包含了一些键,你的键和对象已经包含的键之间可能会有冲突。Map在创建时不包含任何键。

注意:自ECMAScript 2015年起,你可以通过使用 Object.create(null) 来创建你的普通对象图来避免意外的键覆盖。

const map = new Map(); map.set('someKey1', 1); map.set('someKey2', 2); map.set('toString', 3); // No problem for Map  const plainObjMap = new Map(); plainObjMap['someKey1'] = 1; plainObjMap['someKey2'] = 2; plainObjMap['toString'] = 3; // Oops, native property

看完上述内容,你们对在Java中使用HashMap来实现访问的键值对有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI