Java:这段代码是如何删除List中第20到第30个元素的呢

publicstaticvoidmain(String[]args){List<Integer>initData=Collections.nCopies(100,0);/... public static void main(String[] args)
{
List<Integer> initData=Collections.nCopies(100,0); //初始化一个固定长度,不可变列表
List<Integer> list=new ArrayList<Integer>(initData); //转换为可变列表
for(int i=0,size=list.size();i<size;i++) //遍历,删除符合条件的元素
{
if(i>=20&&i<30)
{
list.remove(20);
}
}
}

没看明白执行流程,求大神撸醒我,每次删除后下一位就为移动成为新的20?
展开
 我来答
chengjf0526
2014-07-17
知道答主
回答量:9
采纳率:0%
帮助的人:10.2万
展开全部
你的理解是正确的

list是链式的,remove传入的是索引位置
当当前索引对应位置执行删除后,当前索引后面的所有元素统一(前移)[前移这个说法不太标准,是移动还是进行了其他操作,跟list的具体实现相关,ArrayList是执行了前移],这样当前索引后面的所有元素的索引都会减少1,
因此每次remove(20),第一次移除的是索引为20的,第二次移除的是索引为21(之前为21,移除一次后,索引为21的索引修改为20)的,依次类推

问题本身描述有一个问题【第20到第30个元素】这个说法存在理解问题,因为索引从0开始,第20个元素的索引应该是19,也就是应该将【list.remove(20);】修改为【list.remove(19);】

希望我的回答对你有用
更多追问追答
追问
大哥您好,那这样下标都变了,是如何保证删除操作停下来呢?只想删除20~30的,但是我感觉现在的写法会把后面的都删除了啊,因为一直在向前移动,就一直在删除20位置的元素啊
大哥您好,那这样下标都变了,是如何保证删除操作停下来呢?只想删除20~30的,但是我感觉现在的写法会把后面的都删除了啊,因为一直在向前移动,就一直在删除20位置的元素啊
百度网友f3a603b
2014-07-17 · TA获得超过2582个赞
知道小有建树答主
回答量:2114
采纳率:50%
帮助的人:836万
展开全部
楼主说的对,list就是这样的,如果你把第20个数删了,那么后面的就会前移,之前的第21个数占第20个位置,以此类推最后一个数占前一个的位置。所以只用 list.remove(20)就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
vortexchoo
2015-10-09 · TA获得超过543个赞
知道小有建树答主
回答量:501
采纳率:40%
帮助的人:89.6万
展开全部

public void removeElements(List list,int start,int end){

if(list!=null&&list.size()>0){

for(int i=start-1;i<end-1;i++){

Object o = list.get(i);

if(o!=null){

list.remove(i);

}

}

}

}


本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
btboy1978
2014-07-17 · TA获得超过2015个赞
知道大有可为答主
回答量:2950
采纳率:57%
帮助的人:980万
展开全部
是的,就是重复删除指针为20的Iitem10次,指针为自动上移
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
z871472639
2014-07-17 · TA获得超过249个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:140万
展开全部
java 中List的 remove()方法是从此滚动列表中移除指定位置处的项。
List每remove掉一个元素以后,后面的元素都会向前移动,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式