Содержание
У вас есть эти вопросы?
- Java — как избежать ConcurrentModificationException
- итератор исключения одновременной модификации следующий
- исключение одновременной модификации в Java HashMap
В предыдущей теме мы узнали, как перебирать класс Java Collection ArrayList. Также используется наилучшая практика, чтобы избежать возможной нехватки памяти (OOM) .
В этом уроке мы увидим некоторые основные основы Java Iterator и возможные ConcurrentModificationException ,
Представленный в выпуске Java JDK 1.2, java.util.Iterator Интерфейс позволяет выполнять итерацию классов Collection. Каждый итератор предоставляет next() а также hasNext() метод, и может дополнительно поддерживать remove() метод. Итераторы создаются соответствующим классом контейнера, как правило, методом с именем iterator() , Это улучшение интерфейса Enumeration.
Методы итератора
Итератор определяет три метода, один из которых является необязательным .
Результат |
метод |
Описание |
|---|---|---|
| б = | it.hasNext () | Значение true, если для итератора больше элементов. |
| obj = | it.next () | Возвращает следующий объект. Если к общему списку обращаются, итератор возвращает что-то типа списка. Предварительные универсальные итераторы Java всегда возвращали тип Object , поэтому обычно требовалось снижение. |
| it.remove () | Удаляет самый последний элемент, который был возвращен следующим. Не все коллекции поддерживают удаление. UnsupportedOperationException будет выброшено, если коллекция не поддерживает remove (). |
Важные моменты:
- Итераторы
unidirectional, Мы можем повторять только в одном направлении. - Итерация может быть выполнена только один раз. Если вы дойдете до конца серии, все готово. Если нам нужно повторить итерацию, мы должны получить новый итератор.
Разница между интерфейсами Iterator и Enumeration
- Метод remove () введен в итераторе. Используя этот метод, мы можем удалить элемент из базовой коллекции, которую мы повторяем.
- Перечисление имеет два метода, и оба доступны в итераторе. Имена методов для них обоих сокращены.
Методы ListIterator
ListIterator реализуется только классами, которые реализуют List интерфейс ( ArrayList , LinkedList , а также Vector ). ListIterator обеспечивает следующее.
Результат |
метод |
Описание |
|---|---|---|
| Прямая итерация | ||
| б = | it.hasNext () | Значение true, если в коллекции есть следующий элемент. |
| obj = | it.next () | Возвращает следующий объект. |
| Обратная итерация | ||
| б = | it.hasPrevious () | истина, если есть предыдущий элемент. |
| obj = | it.previous () | Возвращает предыдущий элемент. |
| Получение индекса элемента | ||
| я = | it.nextIndex () | Возвращает индекс элемента, который будет возвращен последующим вызовом next (). |
| я = | it.previousIndex () | Возвращает индекс элемента, который будет возвращен последующим вызовом previous (). |
| Необязательные методы модификации. UnsupportedOperationException выбрасывается, если не поддерживается. | ||
| it.add (OBJ) | Вставляет obj в коллекцию перед следующим элементом, который будет возвращен next (), и после элемента, который будет возвращен previous (). | |
| it.set () | Заменяет самый последний элемент, который был возвращен next или previous (). | |
| it.remove () | Удаляет самый последний элемент, который был возвращен next () или previous (). |
ConcurrentModificationException Basic
Мы не можем добавлять или удалять элементы в базовую коллекцию, когда мы используем итератор.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
пакет crunchify. ком . учебник ;
Импортировать Java. Util. ArrayList ;
/ **
* @author Crunchify.com
*
* /
общественности учебный класс CrunchifyJavaIteratorConcurrentModificationException {
общественности статический недействительным main ( Строка [ ] аргументы ) {
ArrayList
компания. добавить ( eBay ) ;
компания. добавить ( «Paypal» ) ;
компания. добавить ( Google ) ;
за ( Строка s : компания ) {
Система. вне. println ( s ) ;
компания. добавить ( «Yahoo» ) ;
}
}
}
|
Выход Eclipse Console:
0.00 (0%) 0 votes







