Map.clear() vs new Map:哪一个会更好?

2022-08-31 09:44:11

我有一个语法为的Map。在此地图中,可以有 1000 个数据。Map<String, String> testMap = new HashMap<String, String>();

当我的应用程序需要新的数据列表时,我必须清除Map。但是当我看到Map.clear()的代码作为

/**
     * Removes all of the mappings from this map.
     * The map will be empty after this call returns.
     */
    public void clear() {
        modCount++;
        Entry[] tab = table;
        for (int i = 0; i < tab.length; i++)
            tab[i] = null;
        size = 0;
    }

我意识到清晰的方法循环了n次(其中n是Map中的数据数)。所以我认为有一种方法可以重新定义Map,因为以前使用的Map将被垃圾收集。testMap = new HashMap<String, String>();

但我不确定这会是一个好方法。我正在开发移动应用程序。

你能指导我吗?


答案 1

复杂的问题。让我们看看会发生什么。

实例化一个新实例,该实例由新数组支持。因此,垃圾回收器应清除上一个映射中的所有键和值,并清除对自身的引用。所以O(n)算法无论如何都是执行的,但是在垃圾回收器线程中。对于 1000 条记录,您不会看到任何差异。但。性能指南告诉您,如果可以的话,最好不要创建新对象。所以我会用方法。clear()

无论如何,尝试两种变体并尝试测量。始终测量!


答案 2

当你说在大小地图上...您正在要求 GC 清理(键和值)对象。当您对同一地图说时,您是在要求 GC 清理(1 代表地图本身)对象。然后,您将必须创建一个新的 Map 实例,这是另一个开销。所以去吧.在实例化地图时,您可以明智地预设地图的大小。Map.clear()n2*nnull2*n+1Map.clear()


推荐