Используйте интерфейс Iterator для обхода элементов коллекции
Объекты Iterator называются итераторами (тип шаблона проектирования) и в основном используются для обхода элементов в коллекции Collection .
GOF определяет шаблон итератора как: предоставление способа доступа к элементам в объекте-контейнере без раскрытия внутренних деталей объекта. Шаблон итератора создан для контейнеров . Аналог «кондуктор в автобусе», «стюардесса в поезде», «стюардесса».
Интерфейс Collection наследует интерфейс java.lang.Iterable , который имеет метод iterator() , поэтому
Класс коллекции, реализующий интерфейс Collection, имеет метод iterator() , который возвращает объект, реализующий интерфейс Iterator .
Итератор используется только для обхода коллекций , а сам по себе итератор не позволяет хранить объекты. Если вам нужно создать объект Iterator , у вас должна быть повторяющаяся коллекция.
Каждый раз, когда объект коллекции вызывает метод iterator(), получается новый объект итератора , а курсор по умолчанию находится перед первым элементом коллекции.
Методы интерфейса Iterator
Перед вызовом метода it.next() необходимо вызвать it.hasNext() для обнаружения. Если не вызывается и следующая запись недействительна, прямой вызов it.next() вызовет NoSuchElementException.
Операция обхода элементов коллекции использует интерфейс Iterator итератора.
метод первый:
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(456);
coll.add(123);
coll.add(new Person("Jerry", 20));
coll.add(new String("Tom"));
coll.add(false);
Iterator iterator = coll.iterator();
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
System.out.println(iterator.next());
}
Результат операции следующий:
Если мы добавим еще одно предложение: System.out.println(iterator.next());
Результат операции следующий:
Мы видим, что сообщается об исключении: NoSuchElementException
Способ 2:
@Test
public void test1(){
Collection coll = new ArrayList();
coll.add(456);
coll.add(123);
coll.add(new Person("Jerry", 20));
coll.add(new String("Tom"));
coll.add(false);
Iterator iterator = coll.iterator();
//方式一:
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// //报异常:NoSuchElementException
// System.out.println(iterator.next());
//方法二:不推荐
for (int i = 0; i < coll.size(); i++) {
System.out.println(iterator.next());
}
}
результат операции
Способ третий:
public void test1(){
Collection coll = new ArrayList();
coll.add(456);
coll.add(123);
coll.add(new Person("Jerry", 20));
coll.add(new String("Tom"));
coll.add(false);
Iterator iterator = coll.iterator();
//方式一:
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// System.out.println(iterator.next());
// //报异常:NoSuchElementException
// System.out.println(iterator.next());
//方法二:不推荐
// for (int i = 0; i < coll.size(); i++) {
// System.out.println(iterator.next());
// }
//方式三:推荐
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
Результат операции следующий:
Операция обхода элементов коллекции использует интерфейс Iterator итератора.
Внутренние методы: hasNext() и next()
Принцип работы итератора Iterator
Спасибо за просмотр! ! !