溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

在Java中使用HashMap來實(shí)現(xiàn)訪問的鍵值對(duì)

發(fā)布時(shí)間:2021-09-30 15:54:04 來源:億速云 閱讀:190 作者:柒染 欄目:web開發(fā)

今天就跟大家聊聊有關(guān)在Java中使用HashMap來實(shí)現(xiàn)訪問的鍵值對(duì),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

Map是日常編程中比較常用的數(shù)據(jù)結(jié)構(gòu)之一。它保留了可以很容易地通過其鍵來訪問的鍵值對(duì)。在Java中,使用HashMap來實(shí)現(xiàn)這個(gè)目的是很明顯的。然而,在JavaScript中,使用一個(gè)普通的對(duì)象來實(shí)現(xiàn)這個(gè)目標(biāo)是非常方便的。

const map = {};  // 插入鍵值對(duì) map['key1'] = 'value1'; map['key2'] = 'value2'; map['key3'] = 'value3';  // 檢查map包含的鍵 if (map.hasOwnProperty('key1')) {   console.log('Map contains key1'); }  // 通過特定的鍵獲得值 console.log(map['key1']);

但是JavaScript中有一個(gè)專門用于此目的的內(nèi)置數(shù)據(jù)結(jié)構(gòu):Map。讓我給你一些理由,讓你喜歡Map而不是普通的對(duì)象。

1.更多鍵類型

對(duì)象只能有符號(hào)(symbols)或字符串。Map可以將任何類型的值作為鍵:對(duì)象,函數(shù)或基元(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提供了一個(gè)size屬性,但一個(gè)普通對(duì)象的大小卻必須通過艱難的方式來確定。確定Map的大小可以在O(1)時(shí)間內(nèi)完成,而確定一個(gè)普通對(duì)象的大小則需要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.更好的性能

對(duì)Map進(jìn)行了優(yōu)化,以便頻繁地添加和刪除條目。

此外,Map的條目數(shù)可以在恒定的時(shí)間內(nèi)被檢索,而一個(gè)普通對(duì)象的條目數(shù)必須被計(jì)算,這需要O(n)時(shí)間。

以我的Macbook Pro為例,這是一張有1000萬個(gè)條目的Map的平均大小確定時(shí)間。

  • 普通JS對(duì)象: ~1.6 s

  • Map: < 1 ms

此外,它不需要將任何鍵轉(zhuǎn)換為字符串,這可以節(jié)省很多時(shí)間。

4.直接迭代

對(duì)象必須通過獲取鍵并對(duì)其進(jìn)行迭代。另一方面,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之前,一個(gè)對(duì)象的鍵不保證以任何特定的順序出現(xiàn)。在Map上迭代保證鍵按插入順序出現(xiàn)。

6.無鍵覆蓋

一個(gè)普通對(duì)象由于其原型已經(jīng)包含了一些鍵,你的鍵和對(duì)象已經(jīng)包含的鍵之間可能會(huì)有沖突。Map在創(chuàng)建時(shí)不包含任何鍵。

注意:自ECMAScript 2015年起,你可以通過使用 Object.create(null) 來創(chuàng)建你的普通對(duì)象圖來避免意外的鍵覆蓋。

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

看完上述內(nèi)容,你們對(duì)在Java中使用HashMap來實(shí)現(xiàn)訪問的鍵值對(duì)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI