【问题标题】:Does specific type affect performance of an ArrayList?特定类型会影响 ArrayList 的性能吗?
【发布时间】:2011-08-09 11:07:55
【问题描述】:

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

谢谢,

【问题讨论】:

  • 你能澄清你的问题吗?目前它没有多大意义。
  • 再看你的问题..?它要求任何有效的东西......
  • 我认为他的意思是 ArrayList 和 ArrayList
  • 感谢 sepp2k 编辑格式。它失去了。现在是正确的。

标签: java performance types arraylist


【解决方案1】:

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

如果您关心列表使用的内存,那么它将取决于ArrayList 管理的对象的实际大小。如果SimpleObjects 与ComplexObjects 相比是轻量级的,那么在后一种情况下堆上消耗的内存会更高。但是,对于对象数量相等的数组列表,数组列表消耗的实际内存或多或少是恒定的,因为列表只包含对堆上实际对象的引用。

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

另一方面,indexOf(Object object) 的性能将取决于equals 方法的实现方式。对于琐碎的情况,假设SimpleObjectequals() 实现将比ComplexObject 的运行更快,很容易推断ArrayList<SimpleObject>indexOf 将比ArrayList<ComplexObject> 运行得更快。

如果您关心的是在执行ArrayList 方法期间的内存消耗,那么它不一定会有所不同,因为大多数方法都处理对象的引用。有像toArray() 这样的例外情况,SimpleObjectComplexObject 需要更少的内存。

【讨论】:

  • 为什么在 toArray() 中“SimpleObject 的内存比 ComplexObject 的内存多”?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    这并没有什么区别,因为我们在 ArrayList() 中存储的只是一个对象引用,而不是内存。所以没有问题你放什么样的类。所以大类没有性能障碍,小类也没有提高性能。..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-29
      • 2012-02-04
      • 2011-01-28
      • 1970-01-01
      相关资源
      最近更新 更多