有没有办法优化列表地图?

时间:2010-07-30 13:00:20

标签: java

给出以下代码?

final Map<String, List<E>> map = new HashMap<String, List<E>>();

List<E> list = map.get(mapKey);
if (list == null) {
    list = new ArrayList<E>();
    map.put(mapKey, list);
}
list.add(value);

如果有什么办法我可以避免空检查?但是,让我第一次插入Map时会自动为我创建List吗?

我记得我曾经看过一个能够做到这一点的专业地图。但是,我忘记了我已经看到的地方:(

5 个答案:

答案 0 :(得分:7)

您正在寻找Guava的* MultiMap。当它被称为“Google Collections”时,您可能以前曾听说过它。

This博客文章对MultiMap进行了一些讨论。

答案 1 :(得分:4)

您可以使用Multimap中的Guava ...这就是我要做的事情:)(特别是ArrayListMultimap。)

答案 2 :(得分:1)

如果可以,它可能会节省一纳秒,并且可能不值得花费大量时间来搞清楚。但是,如果您尝试优化性能并且有太多或如此大的地图导致性能问题,则可以考虑Javolution。它们具有快速映射和快速列表,其性能远远优于Java的默认映射和列表。

答案 3 :(得分:0)

apache的commons-collections

中有一个MultiValueMap

答案 4 :(得分:0)

如果您的项目数量较少,则数组可能实际上更快。当您有一些项目时,不需要更复杂数据类型的开销,并且线性搜索有助于JVM更快地加载项目。