有人能说我更快吗:Array还是ArrayList? (的ActionScript3)
我试图找到一个关于此的页面,但没有找到任何内容。 谢谢。
答案 0 :(得分:7)
ArrayList class是
IList
的一个简单实现,它使用支持Array
作为数据源。可以使用IList
接口的方法和属性访问和操作后备阵列中的项目。ArrayList
实例上的操作修改数据源;例如,如果您在removeItemAt()
上使用ArrayList
方法,则会从基础Array
中删除该项目。
显然,ArrayList类包装了一个Array对象 - 因此一个普通的Array会比一个ArrayList对象更快。
答案 1 :(得分:4)
如前所述,Array更快。实际上它要快几个数量级。
数组访问的等价物是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
确实提供了许多功能,这些功能在flex中非常有用。一个好的组合是获取基础Array
(可以作为ArrayList::source
访问),执行操作,然后重新分配它(假设您有监听器观察该数组)。
此外,如果你使用Flash Player 10,那么Vector将胜过Array。
格尔茨
back2dos
答案 2 :(得分:2)
数组可能稍快或相同。所有的ArrayList都是iList的一个实现,它使用... Array作为后备对象。