最好从HashMap返回List还是将List保留在内存中?

时间:2018-05-07 12:58:42

标签: java android performance

我看到很多结果从HashMap返回List,所以没有问题,但我很想知道这是否是一个更好的选择,总是这样做,而不是在下面的场景中将对象保存在列表中。

我有一堆Widget对象(idUUID),titleString)和priority({{ 1}}))在单身类int中。我将使用它们来填充WidgetStoreRecyclerView想要View的List,但我也有一个方法可以通过Fragment返回单个Widget。要将Widgets保留在列表中意味着我必须遍历它们以查找具有给定id的那个,因此我认为将它们放在id中要快得多。 HashMap<UUID, Widget>不仅可以快速查找,而且还可以在被问到时返回列表id。这或多或少是最优的吗?有没有办法在不打扰你的情况下为自己找到答案? (问题是我自己的个人启发,我试图在这里更好地学习内部工作。)

以下是object的类:

WidgetStore

1 个答案:

答案 0 :(得分:1)

传统上,您不必担心在开发后期优化代码并且您意识到存在性能问题。但是,如果您正在学习如何了解更多关于更优选的选项,那么它听起来像是一个HashMap或类似的Map。

拥有一个将值作为列表获取的方法可能会有所帮助,具体取决于您是否知道所需的窗口小部件的ID,或者是否需要检查窗口小部件的其他属性以识别它。

就您自己进行分析而言,有几种方法。您可以使用System.currentTimeMillis()这样的一些手动Log语句:

long now = System.currentTimeMillis();
Widget widget = widgetStore.get(id);
long duration = System.currentTimeMillis() - now;
Log.i("WidgetStorePerformance", duration);

这是低技术解决方案。您还可以考虑将Trace方法调用添加到要分析的WidgetStore代码中。

public Widget getWidget(UUID id) {
    Trace.beginSection("WidgetStore");
    Widget widget = mIdMap.get(id);
    if (widget == null) {
        return null;
    }

    Trace.endSection();
    return widget;
}

然后使用this tool