首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从ArrayList中删除元素

从ArrayList中删除元素
EN

Stack Overflow用户
提问于 2016-01-18 12:47:53
回答 3查看 114关注 0票数 1

我有一个ArrayList,它包含10个元素和一个变量int = 12。现在,我想要计算array中有多少个元素,如果小于12,则从0再开始计数,然后停止到索引2并删除它,直到数组中有一个元素。我尝试了以下几点:

代码语言:javascript
复制
int j = 12;
int l = 0;

// Here I check if j is less than array.size
while (j < array.size()) {
    for (int i = 0; i < array.size(); i++) {
        if (j == i + 1) {
            array.remove(i);
        }
    }
}
// Here is for j greater than array.size
while (array.size() != 1) {
    for (int i = 0; i < array.size(); i++) {
        l = j - array.size();
        if (l < array.size()) {
            array.remove(l);
        }
    }
}
System.out.println(array);

更新:

代码语言:javascript
复制
MyArray = {1,2,3,4,5,6,7,8,9,10};
int=12;

MyArray只包含10元素,但是我想删除带有数字12的索引,只要索引12不存在,我就应该开始从零开始计数,并且数字12位于索引2,这就是为什么我应该删除带有数字2的索引。第二次迭代MyArray只包含9元素,而12-9=3则应该删除带有数字3的索引,直到在MyArray中只有一个元素为止。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-18 13:07:07

对最新问题的答复:

当您有一个长度为10的列表,并且要删除“12元素”时,可以使用模运算符:

代码语言:javascript
复制
ArrayList<...> someList = ...;
int toDelete = 12;

int deleteInRange = toDelete % someList.size();
someList.remove(deleteInRange);

模运算符将传递整数除以12 / 10 (toDelete % someList.size())的其余部分。

可以在循环中使用此代码段以删除多个元素。

票数 0
EN

Stack Overflow用户

发布于 2016-01-18 13:01:16

不要在数组中循环两次以删除最后的n个元素,直到列表的长度等于j,您可以简单地使用:

代码语言:javascript
复制
while (j < array.size()) { 
    array.remove(j - 1);
}

如果您总是希望删除索引2,则可以:

代码语言:javascript
复制
while (array.size() >= 3) { // otherwise you will get a ArrayIndexOutOfBoundsException
     array.remove(2);
}

但是,ArrayList中将保留两个元素,而不是1(索引0和1)。此时不能删除μndex 2,因为它不再是有效的索引。

因此,之后可以删除索引0/1,也可以删除我认为要实现的目标:

代码语言:javascript
复制
while (array.size() >= 2) { // otherwise you will get a ArrayIndexOutOfBoundsException
     array.remove(1);
}

然后,在索引0处,列表中只保留一个元素。

编辑:关于你的问题的更新,它是

代码语言:javascript
复制
int originalSize = array.size();
while (array.size() >= originalSize - j) { // otherwise you will get a ArrayIndexOutOfBoundsException
     array.remove(originalSize - j);
}

但是,列表中总是会留下size - j项。例如,除非列表中只有一个元素,否则不能删除索引3。

票数 1
EN

Stack Overflow用户

发布于 2016-01-18 13:36:27

如果您总是希望删除索引2,则可以:

代码语言:javascript
复制
l = j - array.size();

将这一行更改如下:

代码语言:javascript
复制
int sum = 0;
sum = l - array.size();
if (sum > 0) {
    array.remove(sum);
} else {
    sum = array.size() - l;
    array.remove(sum);
}  
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34855198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档