gpt4 book ai didi

java - 防止在 Java 中分配 ArrayList 迭代器

转载 作者:太空宇宙 更新时间:2023-11-03 12:11:36 25 4
gpt4 key购买 nike

因此,我正在编写我的第一个 Android 游戏,在观看了关于游戏优化的冗长介绍之后,我一直在检查我的分配。当它为 for(Object o : m_arrayList) 约定创建一个隐式迭代器时,我已经设法摆脱了所有游戏中的分配,除了那些使我的 ArrayList 的分配。

这些迭代/分配很少,因为我的所有游戏对象、AI 实体等都存储在其中以便于使用。

那么我的选择是什么?

  • 理论上我可以指定合理的上界并使用数组,但我喜欢 ArrayList 的特性,例如 exists 和 remove 保持代码干净和简单。

  • 覆盖 ArrayList 并提供我自己的 iterator() 实现,它返回一个类成员,而不是每次使用它时都分配一个新的迭代器类型。

为了易于使用,我更愿意选择选项 2,但我在这方面做了一些努力,遇到了问题。有没有人有我在上面选项 2 中描述的示例?我在从泛型类继承时遇到了问题,显然是类型冲突。

第二个问题是还有其他方法可以避免这些分配吗?

我想作为一个额外的问题,有谁知道 ArrayList 是否预先分配了一定数量的内存槽(在 ctor 中指定或作为一些可移位的值指定)并且永远不需要进行任何其他分配,只要你留在那些范围内?即使在 clear() 之后?

提前致谢,抱歉,内容太多,但我认为这些信息可能对很多人有用。

最佳答案

使用位置迭代。

for ( int i = 0, n = arrayList.size( ); i < n; ++i )
{
Object val = arrayList.get( i );
}

这就是 Java 5 之前的做法。

用于预分配。

ArrayList arrayList = new ArrayList( numSlots );

或在运行时

arrayList.ensureCapacity( numSlots );

还有奖金 -> http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html

关于java - 防止在 Java 中分配 ArrayList 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8595346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com