#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 да, я делаю, и я использую это все время. Но я хотел попробовать что-то новое, поэтому я это сделал. Вот и все. Я не думаю, что в этом что-то не так.