我有一个字符串的ArrayList,我正在尝试删除ArrayList的奇数元素,即list.remove(1),list.remove(3),list.remove(5)等。
这是我试图使用的代码,它抛出了IllegalStateException错误:
int i = 0;
for (Iterator<String> it = words.iterator(); it.hasNext(); )
{
if (i % 2 != 0 && it.hasNext())
{
it.remove();
}
i++;
}
有更好的(工作)方法吗?
答案 0 :(得分:7)
int i = 0;
for (Iterator<String> it = words.iterator(); it.hasNext(); )
{
it.next(); // Add this line in your code
if (i % 2 != 0)
{
it.remove();
}
i++;
}
答案 1 :(得分:2)
您可以尝试使用此类内容从words[1]
开始删除每个第二个元素。无需检查索引是否为奇数,当我们删除一个元素时,我们只能递增i
,这将是下一个奇数。
int i = 1;
while (i < words.size()) {
words.remove(i++);
}
答案 2 :(得分:2)
您需要克隆此Array或将该奇数元素复制到另一个数组中。在迭代时间内,它使用了相同的对象,因此如果删除其索引并且状态发生了变化。
int i = 0;
List<String> list = new ArrayList<String>();
List<String> words = new ArrayList<String>();
for (String word:words)
{
if (i % 2 != 0)
{
//it.remove();
list.add(word);
}
i++;
}
words.removeAll(list);
现在只需将此列表传递到您的单词列表对象
即可删除所有内容words.removeAll(list);
答案 3 :(得分:0)
我不会使用迭代器,因为您不需要检查元素。只需使用List.remove(index)
:
for (int i = words.size() - 1; i >=0; i--) {
if (i % 2 == 1) {
words.remove(i);
{
}
请注意,您必须倒数,而不是采用这种方法,因为删除元素会将所有内容后移到左侧
如果您的列表是不可变的(解释异常),请先制作副本:
words = new ArrayList(words);
答案 4 :(得分:0)
请使用此功能。
for (int i = 1; i < list.size(); i++) {
list.remove(i);
}
答案 5 :(得分:0)
以下也可以正常使用
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1, 2, 3,
4, 5, 6, 7, 8, 9));
for (int i = 0; i < list.size(); i++) {
System.out.println(i);
list.remove(i);
}
System.out.println(list);
}
产生
[2, 4, 6, 8]
答案 6 :(得分:0)
你需要使用next()然后调用remove()---
int counter = 0;
for (final Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
iterator.next();
if (++counter % 2 != 0) {
iterator.remove();
}
}
答案 7 :(得分:0)
public static List<Integer> removeImpairElements(List<Integer> integers){
int j = 0;
for(int i = 0 ; i < integers.size(); i++){
if( i % 2 == 0){
integers.set(j, integers.get(i));
j++;
}
}
int half = integers.size()%2==0 ? integers.size()/2 : integers.size()/2 + 1;
integers.subList(half , integers.size()).clear();
return integers;
}