特定类型是否会影响ArrayList的性能?

时间:2011-08-09 11:07:56

标签: java performance types arraylist

如果我们关注内存使用和导航速度(foreach,getAt()),我想知道ArrayList<SimpleObject>ArrayList<ComplexObject>是否有不同的性能影响?为什么呢?

谢谢,

3 个答案:

答案 0 :(得分:2)

不,没有性能差异。有两个非常简单的论据来解释这个:

  • 只有ArrayList处理引用和引用总是大小相同,无论它们指向多么复杂。
  • 泛型是使用擦除实现的,这实际上意味着在运行时,一个是ArrayList<SimpleObject>而另一个是ArrayList<ComplexObject>的信息不可用,它们只是ArrayList对象运行时。

答案 1 :(得分:2)

你的问题并不是很清楚你在寻找什么,所以我对你正在寻找的东西做了一些假设。

如果您关心的是列表使用的内存,那么它将取决于ArrayList管理的对象的实际大小。如果SimpleObjectComplexObjects相比是轻量级的,那么在后一种情况下堆上消耗的内存将更高。但是,对于具有相同数量对象的arraylists,数组列表所消耗的实际内存或多或少是常量,因为列表仅包含对堆上实际对象的引用。

关于运行时性能的主题,这取决于被调用的方法。像get(int index)add(E element)这样的方法将始终具有相同的运行时性能特征,而与所使用的类型无关。这是由于方法的性质:它们的行为不依赖于列表中存在的Object的类型。

另一方面,indexOf(Object object)的效果取决于equals方法的实施方式。对于无关紧要的情况,很容易推断indexOf ArrayList<SimpleObject>的运行速度会比ArrayList<ComplexObject>更快,假设equals()的{​​{1}}实施速度更快而不是SimpleObject

如果您在执行ComplexObject方法时担心内存消耗,那么它不一定会有所不同,因为大多数方法都可以解决对象的引用问题。有一些例外情况,例如ArrayListtoArray()需要的内存少于SimpleObject

答案 2 :(得分:1)

它确实没有区别,因为我们存储在ArrayList()中的只是一个对象引用而不是内存。所以没有问题你把它放在什么类的..因此对于较大的类没有性能障碍,对于较小的类没有增强的性能..

相关问题