黑马程序员技术交流社区
标题:
删除元素。。
[打印本页]
作者:
史卜坤
时间:
2012-7-13 15:26
标题:
删除元素。。
import java.util.Vector;
public class test_Vector_Remove_All {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(new Integer(11));
v.add(new Integer(22));
v.add(new Integer(33));
v.add(new Integer(44));
v.add(new Integer(55));
for(int i=0; i<v.size();i++){
v.remove(i);
}
for(int i=0; i<v.size();i++){
System.out.println(v.get(i));
}
}
}
发现第一次没删除完,输出结果居然是22 44 ?
作者:
黑马振鹏
时间:
2012-7-13 15:47
本帖最后由 啸傲江湖007 于 2012-7-13 15:52 编辑
查询API,找到Vector对应的remove()方法
public E remove(int index)移除此向量中指定位置的元素。将所有后续元素左移(将其索引减 1)。返回此向量中移除的元素。
刚开始有五个元素,
第一次remove()减少一个,后续四个统一左移,索引又是从零开始,所以第二次remove()只是删掉索引为一的元素,而不是从零索引开始删除,这样相当于是隔着一个删掉一个。
public class test_Vector_Remove_All {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(new Integer(11));
v.add(new Integer(22));
v.add(new Integer(33));
v.add(new Integer(44));
v.add(new Integer(55));
for(int i=0; i<=v.size();i++){
System.out.println(v.remove(i)+ " ---"+v);
}
for(int i=0; i<v.size();i++){
System.out.println(v.get(i));
}
}
}
打印结果:
11 ---[22, 33, 44, 55]
33 ---[22, 44, 55]
55 ---[22, 44]
22
44
作者:
黑马刘涛
时间:
2012-7-13 15:56
本帖最后由 黑马刘涛 于 2012-7-13 16:24 编辑
不要使用for循环操作数据,
Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件,也就是说,你用for循环删除数据时,索引i递增,而实际向量大小递减,你删除第一个数据正常,此时向量大小为4,i= 2,而向量remove方法是跟数组删除元素方法类似,都是元素左移,长度减1。因此你删除第二个元素实际上就变成了删除原来向量集合中的第3个元素了。自己可以用eclpse单步调试下,观察下集合元素的变换。
建议你用迭代器,用迭代器中的remove方法。API里的说明就不贴了
修改下代码
import java.util.*;
public class testVectorRemoveAll {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>();
v.add(new Integer(11));
v.add(new Integer(22));
v.add(new Integer(33));
v.add(new Integer(44));
v.add(new Integer(55));
//int size = v.size();
ListIterator<Integer> listIter = v.listIterator();
while(listIter.hasNext()){
listIter.next();
listIter.remove();
}
for(int i=0; i<v.size();i++){
System.out.println(v.get(i));
}
if(v.isEmpty())
System.out.println("删除完毕");
}
}
复制代码
作者:
淡然
时间:
2012-7-13 16:59
System.out.println(v.size());
for(int i=0; i<v.size();i++){
System.out.println(i+" "+ v.remove(i));
}
v.size是动态变化的
你这个第一次循环时,删除一个元素后,v.size()已经变成4,循环3次后,v.size()已经变成2了,此时i等于3,循环不满足条件停止循环,所以还有两个无法删除。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2