有人可以說我更快:Array還是ArrayList? (ActionScript3)ActionScript-3:Array與ArrayList
我試圖找到關於此的一個頁面,但沒有找到任何東西。 謝謝。
有人可以說我更快:Array還是ArrayList? (ActionScript3)ActionScript-3:Array與ArrayList
我試圖找到關於此的一個頁面,但沒有找到任何東西。 謝謝。
如前所述,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
+1表示:-) – Amarghosh 2010-08-31 03:43:01
的ArrayList class是一個簡單的實現,其使用的背襯
Array
作爲數據的源IList
。可以使用IList
接口的方法和屬性訪問和操作後備陣列中的項目。對ArrayList
實例的操作修改數據源;例如,如果您在ArrayList
上使用removeItemAt()
方法,則會從基礎Array
中刪除該項目。
顯然ArrayList類包裝一個數組對象 - 因此一個普通的數組將比一個ArrayList對象更快。
數組可能稍快或者它們相等。 ArrayList是一個iList的實現,它使用... Array作爲後臺對象。
你有沒有做過一些測試案例,看看有什麼更快? – 2010-08-30 09:42:42