我有一个不同的对象列表,如:
Object1
Object2
...
ObjectN
每个对象都有一个TYPE
,它可以是多个值中的一个(不超过10个)。这意味着有很多对象具有相同的类型。
将根据类型映射这些对象。
哪种方法在速度方面更有效?
拥有TreeMap<TYPE, List<Object>>
或TreeMap<Object, TYPE>
。
使用的地图不是HashMap
,而是TreeMap
,原因超出了此问题的目的。
如果我使用HashMap
,我认为由于Map<Object, String>
的{{1}}访问时间,实施O(1)
会更快。但是,我无法分辨如果我使用Object
哪种方法可以提供更好的性能。
作为通知,对象的数量不在已知的时间间隔内,无法近似。
编辑:实施取决于此选择。我可以获取具有特定类型的所有元素并进行计算或获取所有元素,获取其类型然后计算我的数据。
非常感谢任何帮助。
答案 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>
更好