0

こんにちは、ベクターから特定の要素を削除しようとしています。私は解決策を持っていますが、私にとってはエレガントでも理想的でもありません。私は MIDP にいるので、Iterator クラスにアクセスできません。それを実装する最良の方法は何ですか?

現在のコード:

    int size = myVector.size();
    Object[] copyofObjects = new Window[size];
    myVector.copyInto(copyofObjects);
    boolean didDelete = false;

    for(int i = 0; i < size; i++)
    {
        Object o = copyofObjects[i];
        if(o.shouldBeDeleted())
        {
            myVector.removeElementAt(myVector.indexOf(o));
            continue;
        }
    }
4

2 に答える 2

1

C++ で行う方法を使用できます ( std::remove_if )。基本的な考え方は、削除するすべての要素を vector の最後にプッシュしてから、vector のサイズを一度に変更することです。次のようになります:(私のJavaが少し錆びている場合は申し訳ありません)

for (int i = 0 , j = 0; i < size ; i++){
     MyObject o = (MyObject)myVector.get (i);
    if (!o.shouldBeDeleted ()){
        //swap the element
        temp = myVector[i]
        myVector[i] = myVector[j]
        myVector[j] = temp;
        j++;
}
}

[0-j[ のすべての要素は良い要素であり、[j-size-1[] の要素は悪い要素です。

myVector.resize(j);
于 2013-02-04T18:08:33.053 に答える
0

私にとって最良の方法は次のとおりです。

Vector newVector = new Vector ();
for (int count = myVector.size (), i = 0; i < count; i++)
{
    MyObject o = (MyObject)myVector.get (i);
    if (!o.shouldBeDeleted ())
        newVector.add (o);
}
myVector = newVector;

または、ごく少数の要素のみを削除する必要がある場合:

for (int i = myVector.size () - 1; i >= 0; i--)
{
    if (((MyObject)myVector.get (i)).shouldBeDeleted ())
        myVector.remove (i);
}
于 2013-02-04T17:58:18.690 に答える