Читаем Философия Java3 полностью

ArrayList pets = Pets.arrayList(8); LinkedList petsLL = new LinkedList(pets); HashSet petsHS = new HashSet(pets); TreeSet petsTS = new TreeSet(pets); di splay(pets.iterator()); display(petsLL iteratorO); di splay(petsHS.iterator()); di spl ay(petsTS. iteratorO);

}

} /* Output:

0:Rat 1-Manx 2-Cymric 3-Mutt 4:Pug 5:Cymric 6:Pug 7:Manx 0:Rat l.Manx 2:Cymric 3:Mutt 4:Pug 5:Cymric 6:Pug 7:Manx 4:Pug 6:Pug 3:Mutt l:Manx 5:Cymric 7:Manx 2:Cymric 0:Rat 5 Cymric 2:Cymric 7:Manx l:Manx 3:Mutt 6:Pug 4:Pug 0:Rat *///:-

В методе display() отсутствует информация о типе последовательности, и в этом проявляется истинная мощь итераторов: операция перемещения по последовательности отделяется от фактической структуры этой последовательности. Иногда говорят, что итераторы унифицируют доступ к контейнерам.

Listlterator

Listlterator — более мощная разновидность Iterator, поддерживаемая только классами List. Если Iterator поддерживает перемещение только вперед, List-Iterator является двусторонним. Кроме того, он может выдавать индексы следующего и предыдущего элементов по отношению к текущей позиции итератора в списке и заменять последний посещенный элемент методом set(). Вызов listIterator() возвращает Listlterator, указывающий в начало List, а для создания итератора Listlterator, изначально установленного на элемент с индексом п, используется вызов listlterator(n). Все перечисленные возможности продемонстрированы в следующем примере:

//: hoiding/Listlteration java import typeinfo.pets.*, import java.util *;

public class Listlteration {

public static void main(String[] args) {

List pets = Pets.arrayList(8); ListIterator it = pets.listlteratorO; while(it.hasNextO)

System.out.print(it.next0 + " + it.nextlndexO + " + it.previousIndexO + ");

System.out.printi n(). // В обратном направлении: while(it.hasPreviousO)

System.out.print(it.previousO.id() + " "); System, out pri nti nO. System.out.printin(pets): it = pets.listlteratorO): while(it.hasNextO) { it.nextO:

i t.set(Pets.randomPet 0):

System out println(pets).

}

} /* Output.

Rat. 1. 0; Manx. 2. 1. Cymric. 3. 2; Mutt. 4. 3. Pug. 5. 4. Cymric. 6. 5. Pug. 7. 6. Manx. 8. 7. 7 6 5 4 3 2 1 0

[Rat. Manx. Cymric. Mutt. Pug. Cymric. Pug. Manx] [Rat. Manx. Cymric. Cymric. Rat. EgyptianMau. Hamster. EgyptianMau] *///•-

Метод Pets.randomPet() используется для замены всех объектов Pet в списке, начиная с позиции 3 и далее.

LinkedList

LinkedList тоже реализует базовый интерфейс List, как и ArrayList, но выполняет некоторые операции (например, вставку и удаление в середине списка) более эффективно, чем ArrayList. И наоборот, операции произвольного доступа выполняются им с меньшей эффективностью.

Класс LinkedList также содержит методы, позволяющие использовать его в качестве стека, очереди (Queue) или двусторонней очереди (дека).

Некоторые из этих методов являются псевдонимами или модификациями для получения имен, более знакомых в контексте некоторого использования. Например, методы getFirst() и element() идентичны — они возвращают начало (первый элемент) списка без его удаления и выдают исключение NoSuch-ElementException для пустого списка. Метод реек() представляет собой небольшую модификацию этих двух методов: он возвращает null для пустого списка.

Метод addFirst() вставляет элемент в начало списка. Метод offer() делает то же, что add() и addLast() — он добавляет элемент в конец списка. Метод removeLast() удаляет и возвращает последний элемент списка.

Следующий пример демонстрирует схожие и различающиеся аспекты этих методов:

// hoiding/LinkedListFeatures java import typeinfo pets *; import java util *;

import static net.mindview util Print.*;

public class LinkedListFeatures {

public static void main(String[] args) { LinkedList pets =

new LinkedList(Pets arrayList(5)); print(pets); // Идентично

print("pets.getFirst()• " + pets getFirstO).

print ("pets element О " + pets.elementO);

// Различие проявляется только для пустых списков:

print("pets peekO: " + pets.peekO);

// Идентично, удаление и возврат первого элемента.

print("pets removeO: " + pets.removeO);

print ("pets removeFirstO: " + pets.removeFirstO);

// Различие проявляется только для пустых списков: продолжение

print ("pets pollO " + pets poll О). print(pets).

pets addFirst(new RatO).

print("After addFirstO " + pets).

pets offer(Pets randomPetO).

print("After offer() " + pets).

pets.add(Pets randomPetO).

print ("After addO " + pets).

pets addLast(new HamsterO).

print ("After addLastO " + pets).

print ("pets removeLastO " + pets removeLastO).

}

} /* Output

[Rat, Manx. Cymric. Mutt. Pug]

pets getFirstO. Rat

pets elementO- Rat

pets.peek О Rat

pets.removeО: Rat

pets removeFirstO: Manx

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT