下面一代java代码,问题写在注释中,请高手解答.

importjava.util.ArrayList;importjava.util.List;publicclassListDemo01{publicstaticvoid... import java.util.ArrayList;
import java.util.List;

public class ListDemo01{
public static void main(String[] args){
List<Integer> lists = null;
lists = new ArrayList<Integer>();
lists.add(1);
lists.add(1);
lists.add(2);
lists.add(2);
lists.add(3);
lists.add(3);
lists.add(4);
lists.add(4);
lists.add(5);
lists.add(5);
lists.add(6);
lists.add(6);
lists.add(7);
lists.add(7);
lists.add(8);
lists.add(8);
for(int i = 0; i<lists.size();i++){
System.out.println(lists.get(i)); //运行结果是1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8
}
lists.remove(0);
lists.remove(1);
lists.remove(2);
lists.remove(3);
lists.remove(4);
System.out.println("删除之后-------");
for(int i = 0;i<lists.size();i++){
System.out.println(lists.get(i)); //删除之后应该是输出3 4 4 5 5 6 6 7 7 8 8才对啊,怎么是1 2 3 4 5 6 6 7 7 8 8 呢
}
}
}
展开
 我来答
河滩上的蝎子
2015-01-17 · 超过34用户采纳过TA的回答
知道答主
回答量:72
采纳率:100%
帮助的人:54.2万
展开全部
//这是orcale jdk7的源码,我加了点注释,看明白了你就知道remove是如何工作的了
public E remove(int index) {
rangeCheck(index); // 检查给的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; // clear to let GC do its work,将最后一位赋值为null以便垃圾回 // 收器回收
return oldValue;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
白菜一颗
2015-01-17 · TA获得超过8916个赞
知道大有可为答主
回答量:3260
采纳率:69%
帮助的人:3736万
展开全部
list里面当你remove之后,后面的元素会自动往前填充,就是你remove(0)之后,你的第二个1会填充到第0个位置上,然后list总长度也会跟着减1,所以你这段remove之后输出的结果才会是这样的
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yang_ll00
2015-01-17 · 超过11用户采纳过TA的回答
知道答主
回答量:28
采纳率:0%
帮助的人:26.4万
展开全部
lists.remove(0)执行删除的是第一个元素,此时list整体向前移动一个位置,所以 lists.remove(1)执行删除的是新的list的第二个元素,依次类推会得到后面的结果,所以在执行一次remove后list会变动,remove是不稳定的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
妥善且明快丶仓鼠D
2015-01-17 · TA获得超过227个赞
知道小有建树答主
回答量:135
采纳率:50%
帮助的人:56.2万
展开全部
主要是 你remove 的时候 list 就直接删掉了,长度就剪短了,等你再次删除的时候 你原来第二个就已经变成了第一个 ,等你去删除第二个的时候其实你删的就是第三个了,依次类推。解决方法 ,可以 另外定义一个 list 把你要删除的元素加入进去,然后用lists.removeAll(list)进行批量删除。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-01-17
展开全部
.对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动
所以如果想实现 3 4 4 5 5 6 6 7 7 8 8
lists.remove(0);
lists.remove(1);
lists.remove(0);
lists.remove(0);
lists.remove(0);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式