есть ли способ преодолеть ошибку ConcurrentModificaionError в следующем коде или лучшую имплиментацию

#java #iterator

#java #итератор

Вопрос:

Что я хочу сделать, так это создать функцию сортировки, которая использует итератор над ArrayList . Я хочу обойти массив в обратном порядке, проверить меньший из i-го и (i-1)-го элемента, если i-й элемент меньше, я перемещаю его в начало массива.

вот мой подход к делу:

 import java.util.*;
// Other imports go here
// Do NOT change the class name
class Main
{
    public void cq1(ArrayList<Integer> list) { 
    ListIterator<Integer> l1=list.listIterator();
    ListIterator<Integer> l2=list.listIterator();
    while(l1.hasNext()){l1.next();l2.next();}//loop to send the listIterator to the end of ArrayList
    l1.previous();//make this iterator point to the second last element
  while(l1.hasPrevious()) 
  { 
      int a=l1.previous();
      int b=l2.previous();
    if (a < b) 
    {
      list.remove(l1.previousIndex() 1); 
      list.add(0, a); 
    } 
      System.out.println(list); 
  } 

}//fn
    public static void main(String[] args)
    {
        Main obj=new Main();
        int a[]={-4, 16, 9, 1, 64, 25, 36, 4, 49};
        ArrayList<Integer> oe = new ArrayList();
        for(int i :a)oe.add(i);
        obj.cq1(oe);
    }//main
    }//class
  

проблема в том, что после первой итерации появляется исключение:ConcurrentModificationError;

Я также пытался сделать то же самое, двигаясь вперед, а не назад. та же ошибка появляется после первой итерации.

Комментарии:

1. Попробуйте выполнить операцию удаления, используя метод ListIterator.remove вместо метода list.remove . List.remove обычно вызывает исключение ConcurrentModificationException при удалении элемента во время его зацикливания.

2. Вы понимаете, что в java есть метод сортировки для коллекций и метод сортировки для массивов, верно ?. Не изобретайте велосипед

3. @Fabien Я рассмотрю это, спасибо.

4. @RVISHAL да, я делаю, и я использую это все время. Но я хотел попробовать что-то новое, поэтому я это сделал. Вот и все. Я не думаю, что в этом что-то не так.