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? 展开
{
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? 展开
5个回答
展开全部
你的理解是正确的
list是链式的,remove传入的是索引位置
当当前索引对应位置执行删除后,当前索引后面的所有元素统一(前移)[前移这个说法不太标准,是移动还是进行了其他操作,跟list的具体实现相关,ArrayList是执行了前移],这样当前索引后面的所有元素的索引都会减少1,
因此每次remove(20),第一次移除的是索引为20的,第二次移除的是索引为21(之前为21,移除一次后,索引为21的索引修改为20)的,依次类推
问题本身描述有一个问题【第20到第30个元素】这个说法存在理解问题,因为索引从0开始,第20个元素的索引应该是19,也就是应该将【list.remove(20);】修改为【list.remove(19);】
希望我的回答对你有用
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位置的元素啊
展开全部
楼主说的对,list就是这样的,如果你把第20个数删了,那么后面的就会前移,之前的第21个数占第20个位置,以此类推最后一个数占前一个的位置。所以只用 list.remove(20)就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是的,就是重复删除指针为20的Iitem10次,指针为自动上移
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
java 中List的 remove()方法是从此滚动列表中移除指定位置处的项。
List每remove掉一个元素以后,后面的元素都会向前移动,
List每remove掉一个元素以后,后面的元素都会向前移动,
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询