我看到很多结果从HashMap返回List,所以没有问题,但我很想知道这是否是一个更好的选择,总是这样做,而不是在下面的场景中将对象保存在列表中。
我有一堆Widget对象(id
(UUID
),title
(String
)和priority
({{ 1}}))在单身类int
中。我将使用它们来填充WidgetStore
。 RecyclerView
想要View的List,但我也有一个方法可以通过Fragment
返回单个Widget。要将Widgets保留在列表中意味着我必须遍历它们以查找具有给定id
的那个,因此我认为将它们放在id
中要快得多。 HashMap<UUID, Widget>
不仅可以快速查找,而且还可以在被问到时返回列表id
。这或多或少是最优的吗?有没有办法在不打扰你的情况下为自己找到答案? (问题是我自己的个人启发,我试图在这里更好地学习内部工作。)
以下是object
的类:
WidgetStore
答案 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