Java 特定类型是否会影响ArrayList的性能?
我想知道如果我们考虑内存使用和导航速度(foreach,getAt()),那么Java 特定类型是否会影响ArrayList的性能?,java,performance,types,arraylist,Java,Performance,Types,Arraylist,我想知道如果我们考虑内存使用和导航速度(foreach,getAt()),那么ArrayList和ArrayList是否具有不同的性能影响?为什么? 谢谢,不,没有性能差异。有两个非常简单的论点可以解释这一点: ArrayList只处理引用,并且引用的大小始终相同,无论它们指向的对象有多复杂 泛型是使用擦除实现的,这本质上意味着在运行时,一个是ArrayList而另一个是ArrayList的信息不可用,它们只是运行时的ArrayList对象 不,没有性能差异。有两个非常简单的论点可以解释这一点
ArrayList
和ArrayList
是否具有不同的性能影响?为什么?
谢谢,不,没有性能差异。有两个非常简单的论点可以解释这一点:
只处理引用,并且引用的大小始终相同,无论它们指向的对象有多复杂ArrayList
- 泛型是使用擦除实现的,这本质上意味着在运行时,一个是
而另一个是ArrayList
的信息不可用,它们只是运行时的ArrayList
对象ArrayList
只处理引用,并且引用的大小始终相同,无论它们指向的对象有多复杂ArrayList
- 泛型是使用擦除实现的,这本质上意味着在运行时,一个是
而另一个是ArrayList
的信息不可用,它们只是运行时的ArrayList
对象ArrayList
- 这没有什么区别,因为我们存储在ArrayList()中的只是一个对象引用,而不是内存。所以不管你给它上了什么课。。因此,大型类没有性能障碍,小型类没有性能增强。这没有什么区别,因为我们在ArrayList()中存储的只是一个对象引用,而不是内存。所以不管你给它上了什么课。。因此,大班没有性能障碍,小班没有性能增强。你的问题不是很清楚你在寻找什么,所以我对你在寻找什么做了一些假设
如果您关心的是列表使用的内存,那么它将取决于
ArrayList
管理的对象的实际大小。如果与complexObject
相比,SimpleObject
是轻量级的,那么在后一种情况下,堆上消耗的内存将更高。但是,对于具有相同数量对象的ArrayList,数组列表消耗的实际内存或多或少是恒定的,因为这些列表只包含对堆上实际对象的引用
关于运行时性能,这取决于所调用的方法。像get(int-index)
和add(E-element)
这样的方法无论使用何种类型,都将始终具有相同的运行时性能特征。这是由于方法的性质:它们的行为不依赖于列表中存在的对象的类型
另一方面,indexOf(Object Object)
的性能将取决于equals
方法的实现方式。对于一般情况,很容易推断indexOf
对于ArrayList
比ArrayList
运行得更快,假设equals()
实现的SimpleObject
比ComplexObject
运行得更快
如果您关心的是执行
ArrayList
方法期间的内存消耗,那么它不一定会有所不同,因为大多数方法都会处理对象的引用。也有一些例外情况,如toArray()
,对于SimpleObject
来说所需的内存比对于ComplexObject
,您的问题不是很清楚您在寻找什么,所以我对您在寻找什么做了一些假设
如果您关心的是列表使用的内存,那么它将取决于ArrayList
管理的对象的实际大小。如果与complexObject
相比,SimpleObject
是轻量级的,那么在后一种情况下,堆上消耗的内存将更高。但是,对于具有相同数量对象的ArrayList,数组列表消耗的实际内存或多或少是恒定的,因为这些列表只包含对堆上实际对象的引用
关于运行时性能,这取决于所调用的方法。像get(int-index)
和add(E-element)
这样的方法无论使用何种类型,都将始终具有相同的运行时性能特征。这是由于方法的性质:它们的行为不依赖于列表中存在的对象的类型
另一方面,indexOf(Object Object)
的性能将取决于equals
方法的实现方式。对于一般情况,很容易推断indexOf
对于ArrayList
比ArrayList
运行得更快,假设equals()
实现的SimpleObject
比ComplexObject
运行得更快
如果您关心的是执行
ArrayList
方法期间的内存消耗,那么它不一定会有所不同,因为大多数方法都会处理对象的引用。也有一些例外情况,如toArray()
,对于SimpleObject
来说需要的内存比对于ComplexObject
来说要少。您能澄清一下您的问题吗?现在这没有多大意义。再看看你的问题。。?我想他指的是ArrayList和ArrayList感谢sepp2k编辑格式。它输了。现在是正确的。你能澄清你的问题吗?现在这没有多大意义。再看看你的问题。。?我想他指的是ArrayList和ArrayList感谢sepp2k编辑格式。它输了。现在是正确的。为什么在toAr中“SimpleObject的内存比ComplexObject的内存多?”