您好我正试图从矢量中删除某些元素。我有一个解决方案,但对我来说它不优雅或理想。我在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;
}
}
答案 0 :(得分:2)
你可以在c ++中使用它们的方式(std::remove_if)。基本思想是在向量的末尾推送你想要删除的所有元素,然后一次调整向量的大小。 它是这样的:(对不起,如果我的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);
答案 1 :(得分: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);
}