当您将对象作为键时,您什么时候会在 WeakMap 上使用 Map?

When would you use a Map over a WeakMap when you have objects as keys?

有几次我将对象用作地图中的键,我这样做是为了存储有关该特定对象的元数据。我一直为此使用 WeakMap,因为当用作键的对象被垃圾回收时,地图中的条目会自动被垃圾回收。

存储元数据是我能想到的唯一将对象用作地图键的用例,但我很好奇是否还有其他将对象用作键的用例,如果在这些情况下,您会使用常规MapWeakMap.

考虑建模图的实现。让我们假设图形的节点可以是用户定义的对象。图实现需要存储这些节点,但也需要将它们与其他数据相关联(例如边(想想邻接 "dictionary"))。我们需要一个 Map,因为我们还必须能够遍历所有节点(这就是 networkx.github.io 所做的(在 Python 中)和我的 JS 端口)

即使我们不需要遍历节点,如果没有其他引用,我们也可能不希望它们被垃圾回收,因为那样会悄无声息地破坏图表。

- 菲利克斯·克林