IViewCursorその1

勉強会で出てきたmx.collections.IViewCursorについて調べてみました。
このインターフェースは、ArrayCollectionやXMLListCollectionが実装しています。
パッケージ名からも分かるように、コレクション用のインターフェースで

  • 双方向逐次アクセス
  • コレクションへの追加・削除
  • 検索

の機能を提供するメソッドが定義されています。
双方向逐次アクセス機能と追加削除の機能は、JavaのListIteratorとほぼ同機能です。JavaとAS3では次のような感じになります。

    LinkedList list = new LinkedList();
    list.add("a");
    list.add("b");
    list.add("c");
    list.add("d");
    
    ListIterator cursor = list.listIterator();
    cursor.next();
    cursor.next();
    cursor.remove();
    cursor.add("z");
    cursor.previous();
    cursor.previous();
    
    while(cursor.hasNext()){
        Object o = cursor.next();
        System.out.println(o);
    }
    while(cursor.hasPrevious()){
        Object o = cursor.previous();
        System.out.println(o);
    }
  • AS3
    var list:ArrayCollection = new ArrayCollection();
    list.addItem("a");
    list.addItem("b");
    list.addItem("c");
    list.addItem("d");
    
    var cursor:IViewCursor = list.createCursor();
    cursor.moveNext();
    cursor.remove();      
    cursor.insert("z");
    cursor.movePrevious();
    cursor.movePrevious();

    while (!cursor.afterLast){
      var o:Object = cursor.current;
      trace(o);
      cursor.moveNext();
    }      
    cursor.movePrevious();
    while (!cursor.beforeFirst){
      o = cursor.current;
      trace(o);
      cursor.movePrevious();
    }

上記サンプルはいずれも「azcddcza」を出力します。
Javaの方はnext()を呼ぶまで初めの要素にカーソルが当っていないのに対し、AS3ではcreateCursorを呼んだ時点で初めの要素にカーソルが当たっている為、アクセスが若干異なる点は注意すべき点です。

検索機能についてはJavaと異なるようです。続きは次回。