从ArrayList中删除元素

时间:2016-01-18 12:47:53

标签: java arraylist

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

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);

更新

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的索引,直到{{1}中只有一个元素}}

3 个答案:

答案 0 :(得分:1)

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

while (j < array.size()) { 
    array.remove(j - 1);
}

如果您始终想要删除索引2,则可以执行以下操作:

while (array.size() >= 3) { // otherwise you will get a ArrayIndexOutOfBoundsException
     array.remove(2);
}

但是,您将在ArrayList中保留两个元素而不是1(在索引0和1处)。此时无法删除“指数2”,因为它不再是有效索引。

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

while (array.size() >= 2) { // otherwise you will get a ArrayIndexOutOfBoundsException
     array.remove(1);
}

然后在索引0的列表中只剩下一个元素。

编辑:对于您的问题的更新,它是

int originalSize = array.size();
while (array.size() >= originalSize - j) { // otherwise you will get a ArrayIndexOutOfBoundsException
     array.remove(originalSize - j);
}

但是,您的列表中始终会留下size - j个项目。例如,在列表中只有一个元素之前,不能删除索引3。

答案 1 :(得分:0)

更新问题的答案:

如果您有一个长度为10的列表,并且您想要删除&#34;第12个元素&#34;你可以使用模运算符:

ArrayList<...> someList = ...;
int toDelete = 12;

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

模运算符将提供12/10整数分区的其余部分(toDelete % someList.size()

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

答案 2 :(得分:-1)

如果您始终想要删除索引2,则可以执行以下操作:

l = j - array.size();

如下所示更改此行:

int sum = 0;
sum = l - array.size();
if (sum > 0) {
    array.remove(sum);
} else {
    sum = array.size() - l;
    array.remove(sum);
}