2016-02-20 3 views
0

Уменьшаете ли вы переменную счетчика в цикле for после удаления элемента ArrayList? Если да, это потому, что список сдвинется влево? Я представил свой код, который, кажется, работает:Вы уменьшаете счетчик в цикле for после удаления элемента ArrayList?

public void removeLine(String ln) 
{ 
    //loop through lineList 
    for (int i = 0; i < lineList.size(); i++) 
    { 
    //check if match is found 
    if (lineList.get(i).equals(ln)) 
    { 
     //remove element at i 
     lineList.remove(i); 

     //decrement i 
     i--; 
    } //end if 
    } //end for 
} //remove line 
+0

Почему бы не назвать 'lineList.remove (ln)'? –

+0

Обычно я бы это сделал. Я просто попытался привести быстрый пример, используя цикл for. Поскольку удаление сдвигов в списке осталось, я бы уменьшил i? – Logan

ответ

0

Да, вы должны уменьшить его, или он будет пропускать через следующую запись.

В качестве альтернативы, я предпочитаю не приращение, если предмет удален. Например:

public void removeLine(String ln) 
{ 
    //loop through lineList 
    for (int i = 0; i < lineList.size(); /**/) 
    { 
    //check if match is found 
    if (lineList.get(i).equals(ln)) 
    { 
     //remove element at i 
     lineList.remove(i); 
     continue; 
    } 

    ++i; 
    } 
} 
+0

Это интересный способ. Благодаря! – Logan

0

Используйте Итератор, как это.

public void removeLine(List<String> lineList, String ln) { 
    for (Iterator<String> i = lineList.iterator(); i.hasNext();) 
     if (i.next().equals(ln)) 
      i.remove(); 
} 
Смежные вопросы