mak*_*kar 3 java android iterator allocation
因此,我通过在Android上编写我的第一个游戏,并在观看了关于优化游戏的冗长演示后,我一直在检查我的分配.除了为for(Object o:m_arrayList)约定创建隐式迭代器之外,我设法摆脱了所有游戏内分配,而不是我的ArrayList.
由于我的所有游戏对象,ai实体等都存储在这些迭代/分配中以便于使用,因此这些迭代/分配中有很少一部分.
那么我的选择是什么?
我理论上可以指定合理的上边界并使用数组,但我喜欢ArrayList的特性,例如exists和remove,它们保持代码干净简单.
覆盖ArrayList并提供我自己的iterator()实现,它返回一个类成员,而不是每次使用时都分配一个新的迭代器类型.
我更愿意选择2以方便使用,但是我有点偏执并遇到了问题.有没有人有我在上面选项2中描述的例子?我在从泛型类继承时遇到了问题,显然是冲突类型.
那么第二个问题是还有其他选择来避免这些分配吗?
我想作为一个额外的问题,有没有人知道ArrayList是否预先分配了一定数量的内存插槽(在ctor中指定或作为一些可移动值指定),并且只要你保持在内,就永远不需要做任何其他分配那些界限?即使在明确()之后?
在此先感谢,抱歉有那么多,但我认为这些信息可能对很多人有用.
使用位置迭代.
for ( int i = 0, n = arrayList.size( ); i < n; ++i )
{
Object val = arrayList.get( i );
}
Run Code Online (Sandbox Code Playgroud)
这就是在Java 5之前完成的.
用于预分配.
ArrayList arrayList = new ArrayList( numSlots );
Run Code Online (Sandbox Code Playgroud)
或在运行时
arrayList.ensureCapacity( numSlots );
Run Code Online (Sandbox Code Playgroud)
并获得奖金 - > http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html
| 归档时间: |
|
| 查看次数: |
1894 次 |
| 最近记录: |