Как уже говорилось, массив работает быстрее.На самом деле это на порядки быстрее.
Эквивалентами доступа к массиву являются getItemAt
и setItemAt
.
Реализация:
public function getItemAt(index:int, prefetch:int = 0):Object
{
if (index < 0 || index >= length)
{
var message:String = resourceManager.getString(
"collections", "outOfBounds", [ index ]);
throw new RangeError(message);
}
return source[index];
}
и:
public function setItemAt(item:Object, index:int):Object
{
if (index < 0 || index >= length)
{
var message:String = resourceManager.getString(
"collections", "outOfBounds", [ index ]);
throw new RangeError(message);
}
var oldItem:Object = source[index];
source[index] = item;
stopTrackUpdates(oldItem);
startTrackUpdates(item);
//dispatch the appropriate events
if (_dispatchEvents == 0)
{
var hasCollectionListener:Boolean =
hasEventListener(CollectionEvent.COLLECTION_CHANGE);
var hasPropertyListener:Boolean =
hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE);
var updateInfo:PropertyChangeEvent;
if (hasCollectionListener || hasPropertyListener)
{
updateInfo = new PropertyChangeEvent(PropertyChangeEvent.PROPERTY_CHANGE);
updateInfo.kind = PropertyChangeEventKind.UPDATE;
updateInfo.oldValue = oldItem;
updateInfo.newValue = item;
updateInfo.property = index;
}
if (hasCollectionListener)
{
var event:CollectionEvent =
new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
event.kind = CollectionEventKind.REPLACE;
event.location = index;
event.items.push(updateInfo);
dispatchEvent(event);
}
if (hasPropertyListener)
{
dispatchEvent(updateInfo);
}
}
return oldItem;
}
Здесь задействовано множество вызовов и проверок.Обратите внимание, что _dispatchEvents == 0
- это true
по умолчанию (если вы не disableEvents
), поэтому запись на самом деле является огромной операцией.
Однако ArrayList
предоставляет множество функций, которые полезныв пределах гибкогоХорошим компромиссом является захват базового Array
(доступного как ArrayList::source
), выполнение ваших операций, а затем переназначение его (если у вас есть слушатели, наблюдающие этот массив).
Кроме того, если вы используете FlashИгрок 10, тогда Vector превзойдет Array.
greetz
back2dos