Java Small Map <string,list =“”> vs Large Map <object,string =“”> performance </object,> </string,>

时间:2013-11-08 10:10:22

标签: java performance list map

我有一个不同的对象列表,如:

Object1
Object2
...
ObjectN

每个对象都有一个TYPE,它可以是多个值中的一个(不超过10个)。这意味着有很多对象具有相同的类型。

将根据类型映射这些对象。 哪种方法在速度方面更有效? 拥有TreeMap<TYPE, List<Object>>TreeMap<Object, TYPE>。 使用的地图不是HashMap,而是TreeMap,原因超出了此问题的目的。

如果我使用HashMap,我认为由于Map<Object, String>的{​​{1}}访问时间,实施O(1)会更快。但是,我无法分辨如果我使用Object哪种方法可以提供更好的性能。

作为通知,对象的数量不在已知的时间间隔内,无法近似。

编辑:实施取决于此选择。我可以获取具有特定类型的所有元素并进行计算或获取所有元素,获取其类型然后计算我的数据。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

TreeMap在内部实现为红黑树,因此对于任何操作,其时间复杂度将为O(logn)。因此,HashMap对于索引访问来说更快。但是使用HashMap,您无​​法以有序的方式存储数据,因此搜索操作将为O(n)。来自docs:

  

基于红黑树的NavigableMap实现。地图已排序   根据其键的自然顺序,或由比较器   在地图创建时提供,具体取决于使用的构造函数。   此实现提供了保证的log(n)时间成本   containsKey,get,put和remove操作。

如果您使用TreeMap<TYPE, List<Object>>TreeMap<Object, TYPE>,则没有区别。性能的差异取决于equals和hashcode函数的实现。在这种情况下,不是选择映射策略。选择最适合您的软件设计需求的方式。

答案 1 :(得分:0)

所有实现都需要获取所有元素

获取具有特定类型的所有元素并进行计算或

显然,Map<Type, List>在这种情况下会更好。

获取所有元素,获取其类型,然后计算我的数据。

这等于

 foreach types do
      do condition (1)

所以,Map<Type, List>更好