给出以下代码?
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吗?
我记得我曾经看过一个能够做到这一点的专业地图。但是,我忘记了我已经看到的地方:(
答案 0 :(得分:7)
答案 1 :(得分:4)
您可以使用Multimap
中的Guava ...这就是我要做的事情:)(特别是ArrayListMultimap
。)
答案 2 :(得分:1)
如果可以,它可能会节省一纳秒,并且可能不值得花费大量时间来搞清楚。但是,如果您尝试优化性能并且有太多或如此大的地图导致性能问题,则可以考虑Javolution。它们具有快速映射和快速列表,其性能远远优于Java的默认映射和列表。
答案 3 :(得分:0)
apache的commons-collections
中有一个MultiValueMap答案 4 :(得分:0)
如果您的项目数量较少,则数组可能实际上更快。当您有一些项目时,不需要更复杂数据类型的开销,并且线性搜索有助于JVM更快地加载项目。