import java.util.ArrayList;
import java.util.List;
public class TestRemove {
public static void main(String[] args) {
List<Integer> i = new ArrayList<Integer>();
i.add(1);
i.add(2);
i.add(3);
i.add(4);
i.add(5);
i.add(6);
i.add(7);i.add(8);
i.add(9);
i.add(10);
i.add(11);
for(int ii=0;ii<i.size();ii++) {
i.remove(ii);
}
System.out.println(i.size());
}
}这打印结果居然不是0,为什么啊
import java.util.List;
public class TestRemove {
public static void main(String[] args) {
List<Integer> i = new ArrayList<Integer>();
i.add(1);
i.add(2);
i.add(3);
i.add(4);
i.add(5);
i.add(6);
i.add(7);i.add(8);
i.add(9);
i.add(10);
i.add(11);
for(int ii=0;ii<i.size();ii++) {
i.remove(ii);
}
System.out.println(i.size());
}
}这打印结果居然不是0,为什么啊
for(int ii=i.size();ii>0;) {
i.remove(--ii);
}
import java.util.List;
public class TestRemove {
public static void main(String[] args) {
List<Integer> i = new ArrayList<Integer>();
i.add(1);
i.add(2);
i.add(3);
i.add(4);
i.add(5);
i.add(6);i.add(7);i.add(8);
i.add(9);
i.add(10);
i.add(11);
System.out.println(i.size());//这是删除之前的该集合的大小;
for(int ii=0;ii<i.size();ii++) {
i.remove(ii);
System.out.println(i.size())//这是删除每一个之后的集合的大小;
}
System.out.println(i.size())//这是删除完毕之后打印的结果}}
输出结果为:
11
10
9
8
7
6
5
5
for循环的运行过程为:
当ii=0,结果为:10;
当ii=1,结果为:9;
当ii=2,结果为:8;
当ii=3,结果为:7;
当ii=4,结果为:6;
当ii=5,结果为:5;
当ii=6,i.size()=4而ii>i.size()不符合for循环的条件就退出for循环所以不再循环了;
List<Integer> i = new ArrayList<Integer>();
i.add(1);
i.add(2);
i.add(3);
i.add(4);
i.add(5);
i.add(6);
i.add(7);
i.add(8);
i.add(9);
i.add(10);
i.add(11);
System.out.println(i.size());// 这是删除之前的该集合的大小;
List<Integer> deleteList = new ArrayList<Integer>();
for (int ii = 0; ii < i.size(); ii++) {
deleteList.add(i.get(ii));
}
i.removeAll(deleteList); //这才是正确的删除方式
System.out.println(i.size());// 这是删除完毕之后打印的结果LZ 调用ArrayList的
public E remove(int index) {
RangeCheck(index); modCount++;
E oldValue = elementData[index]; int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; return oldValue;
}
数组的长度在不断变小,循环的次数相应减小,不能清空数组中对象引用
没有这么移除的,如果直接操作List应该从最后一个元素开始remove;标准的做法是通过List的Iterator进行集合操作。
for(int ii=i.size()-1;i>=0;i--){
i.remove(ii);
}
System.out.println(i);
输出的结果是:[]
for(int ii=0;ii<i.size();ii++) {
i.remove(ii);
ii--;
}
这样应该就可以了
这样就可以了,
ii就不要进行++操作,直接循环remove
性能优化一下:
List<Integer> i = new ArrayList<Integer>();
i.add(1);
i.add(2);
i.add(3);
i.add(4);
i.add(5);
i.add(6);i.add(7);i.add(8);
i.add(9);
i.add(10);
i.add(11);for(int ii=0,len=i.size();ii<len;ii++) {
i.remove(ii);
}
System.out.println(i.size());
删列表的数据有很多种,但是用迭代器删除的时候要注意。只能用迭代器的remove方法,其他的都会得到一个ConcurrentModificationException。for(;list.size()>0;)
{
list.remove(0);
}
````````````````````````````
Iterator it = list.listIterator();
while(it.hasNext())
{
it.next();
it.remove();
}
for(int ii=0;ii<i.size();ii++) {
i.remove(ii);
}
这样的写法缺点多多啊
1、循环边界最好不要变化,这样容易造成死循环而且循环边界不容易控制
2、计算最好不要放到循环条件里面,而且是每次循环都要执行一次的,这样就浪费了性能
要么改成这样,每次删第一个
int size = i.size();
for(int ii=0;ii<size;ii++) {
i.remove(0);
}
要么就按6楼的,从后面开始删,或者用迭代器
,所以就删不掉了。 最后用java自带的要好点
删除是从0开始的其次,ii增加了,每remove一次,数组的长度变小了改正方法见楼上
改成这样
Iterator it = list.iterator();
while(it.hasnext()){
it.next();
it.remove();
}
import java.util.ArrayList;
import java.util.List;public class TestRemove{
public static void main(String[] args) {
List<Integer> i=new ArrayList<Integer>(); //尖括号泛型
i.add(1);
i.add(2);
while(i.size()!=0){
i.remove(0);
}
System.out.println(i.size());
}
}
这样就对了。
ii=0 i[0]=1 被移除,后边所有元素序号减1。此时i[0]=2
ii=1 i[1]=3 被移除,后边所有元素序号减1。此时i[1]=5
以此类推,并且移除过程中,i.length会每次减1。
元素值为 1、3、5、7、9、11的元素被移除,漏过的为2、4、6、8、10
因此最后打印出来的结果为5。
给分吧