Published
Edited
Dec 10, 2020
Insert cell
md`# Performance: <code>Map</code> vs. <code>Set</code> vs. <code>Object(\{\})</code>
Give results first:
- Initialization:
${stringify(init_result)}
- Finding:
${stringify(finding_result)}
- Adding:
${stringify(adding_result)}
- Deleting:
${stringify(deleting_result)}
`
Insert cell
function stringify(result) {
let names = {
map: '<code>Map</code>',
set: '<code>Set</code>',
obj: '<code>Object\{\}</code>'
}
let minTimeKey = 'map'
let minTime = result[minTimeKey]
Object.entries(result).forEach(([key, value]) => {
if (value < minTime) {
minTime = value
minTimeKey = key
}
})
names[minTimeKey] = "✔️" + names[minTimeKey]
return `- ${names.map}: ${result.map}ms
- ${names.set}: ${result.set}ms
- ${names.obj}: ${result.obj}ms`
}
Insert cell
md`## Initialization`
Insert cell
init_result = {
const N = 1000000
let mapArray = new Array(N).fill(0).map((_, i) => [i, i])
let mapTime = new Date()
let map = new Map(mapArray)
mapTime = new Date() - mapTime
let setArray = new Array(N).fill(0).map((_, i) => i)
let setTime = new Date()
let set = new Set(setArray)
setTime = new Date() - setTime
let obj = {}
let objTime = new Date()
for (let i = 0; i < N; i++) {
obj[i] = true
}
objTime = new Date() - objTime
return {map: mapTime, set: setTime, obj: objTime}
}
Insert cell
md`## Finding entries`
Insert cell
finding_result = {
const N = 1000000
let flag = false
let mapArray = new Array(N).fill(0).map((_, i) => [i, i])
let map = new Map(mapArray)
let mapTime = new Date()
for (let i = 0; i < N; i++) {
flag = map.get(i)
}
mapTime = new Date() - mapTime
let setArray = new Array(N).fill(0).map((_, i) => i)
let set = new Set(setArray)
let setTime = new Date()
for (let i = 0; i < N; i++) {
flag = set.has(i)
}
setTime = new Date() - setTime
let obj = {}
for (let i = 0; i < N; i++) {
obj[i] = true
}
let objTime = new Date()
for (let i = 0; i < N; i++) {
flag = (i in obj)
}
objTime = new Date() - objTime
return {map: mapTime, set: setTime, obj: objTime}
}
Insert cell
md`## Adding entries`
Insert cell
adding_result = {
const N = 1000000
let flag = false
let map = new Map()
let mapTime = new Date()
for (let i = 0; i < N; i++) {
map.set(i, i)
}
mapTime = new Date() - mapTime
let set = new Set()
let setTime = new Date()
for (let i = 0; i < N; i++) {
set.add(i)
}
setTime = new Date() - setTime
let obj = {}
let objTime = new Date()
for (let i = 0; i < N; i++) {
obj[i] = true
}
objTime = new Date() - objTime
return {map: mapTime, set: setTime, obj: objTime}
}
Insert cell
md`## Deleting entries`
Insert cell
deleting_result = {
const N = 1000000
let mapArray = new Array(N).fill(0).map((_, i) => [i, i])
let map = new Map(mapArray)
let mapTime = new Date()
for (let i = 0; i < N; i++) {
map.delete(i)
}
mapTime = new Date() - mapTime
let setArray = new Array(N).fill(0).map((_, i) => i)
let set = new Set(setArray)
let setTime = new Date()
for (let i = 0; i < N; i++) {
set.delete(i)
}
setTime = new Date() - setTime
let obj = {}
for (let i = 0; i < N; i++) {
obj[i] = true
}
let objTime = new Date()
for (let i = 0; i < N; i++) {
delete obj[i]
}
objTime = new Date() - objTime
return {map: mapTime, set: setTime, obj: objTime}
}
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more