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

Java 特定类型是否会影响ArrayList的性能?,java,performance,types,arraylist,Java,Performance,Types,Arraylist,我想知道如果我们考虑内存使用和导航速度(foreach,getAt()),那么ArrayList和ArrayList是否具有不同的性能影响?为什么? 谢谢,不,没有性能差异。有两个非常简单的论点可以解释这一点: ArrayList只处理引用,并且引用的大小始终相同,无论它们指向的对象有多复杂 泛型是使用擦除实现的,这本质上意味着在运行时,一个是ArrayList而另一个是ArrayList的信息不可用,它们只是运行时的ArrayList对象 不,没有性能差异。有两个非常简单的论点可以解释这一点

我想知道如果我们考虑内存使用和导航速度(foreach,getAt()),那么
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的内存多?”