如果我们关注内存使用和导航速度(foreach,getAt()),我想知道ArrayList<SimpleObject>
和ArrayList<ComplexObject>
是否有不同的性能影响?为什么呢?
谢谢,
答案 0 :(得分:2)
不,没有性能差异。有两个非常简单的论据来解释这个:
ArrayList
处理引用和引用总是大小相同,无论它们指向多么复杂。ArrayList<SimpleObject>
而另一个是ArrayList<ComplexObject>
的信息不可用,它们只是ArrayList
对象运行时。答案 1 :(得分:2)
你的问题并不是很清楚你在寻找什么,所以我对你正在寻找的东西做了一些假设。
如果您关心的是列表使用的内存,那么它将取决于ArrayList
管理的对象的实际大小。如果SimpleObject
与ComplexObjects
相比是轻量级的,那么在后一种情况下堆上消耗的内存将更高。但是,对于具有相同数量对象的arraylists,数组列表所消耗的实际内存或多或少是常量,因为列表仅包含对堆上实际对象的引用。
关于运行时性能的主题,这取决于被调用的方法。像get(int index)
和add(E element)
这样的方法将始终具有相同的运行时性能特征,而与所使用的类型无关。这是由于方法的性质:它们的行为不依赖于列表中存在的Object的类型。
另一方面,indexOf(Object object)
的效果取决于equals
方法的实施方式。对于无关紧要的情况,很容易推断indexOf
ArrayList<SimpleObject>
的运行速度会比ArrayList<ComplexObject>
更快,假设equals()
的{{1}}实施速度更快而不是SimpleObject
。
如果您在执行ComplexObject
方法时担心内存消耗,那么它不一定会有所不同,因为大多数方法都可以解决对象的引用问题。有一些例外情况,例如ArrayList
,toArray()
需要的内存少于SimpleObject
。
答案 2 :(得分:1)
它确实没有区别,因为我们存储在ArrayList()中的只是一个对象引用而不是内存。所以没有问题你把它放在什么类的..因此对于较大的类没有性能障碍,对于较小的类没有增强的性能..