pets.poll О Cymric
[Mutt. Pug]
After addFirstO: [Rat. Mutt. Pug] After offerO: [Rat. Mutt. Pug. Cymric] After addO: [Rat. Mutt. Pug. Cymric. Pug] After addLastO* [Rat. Mutt. Pug. Cymric. Pug. Hamster] pets removeLastO. Hamster *///:-
Результат Pets.arrayList() передается конструктору LinkedList для заполнения. Присмотревшись к интерфейсу Queue, вы найдете в нем методы element(), offer(), peek(), poll() и remove(), добавленные в LinkedList для использования в реализации очереди (см. далее).
Стек
Стек часто называют контейнером, работающим по принципу «первым вошел, последним вышел» (LIFO). То есть элемент, последним занесенный в стек, будет первым, полученным при извлечении из стека.
В классе LinkedList имеются методы, напрямую реализующие функциональность стека, поэтому вы просто используете LinkedList, не создавая для стека новый класс. Впрочем, иногда отдельный класс для контейнера-стека лучше справляется с задачей:
//. net/mi ndvi ew/uti1/Stack java // Создание стека из списка LinkedList. package net.mindview.util: import java.util.LinkedList:
public class Stack
private LinkedList
public String toStringO { return storage.toStringO. } } ///:-
Это простейший пример определения класса с использованием параметризации. Суффикс <Т> после имени класса сообщает компилятору, что тип является
//• hoiding/StackTest.java import net.mindview util.*:
public class StackTest {
public static void main(String[] args) {
Stack
stack.push(s); whi led stack. emptyO)
System out pri nt(stack.pop() + " ");
}
} /* Output: fleas has dog My *///:-
Если вы хотите использовать класс Stack в своем коде, вам придется либо полностью указать пакет, либо изменить имя класса при создании объекта; в противном случае, скорее всего, возникнет конфликт с классом Stack из пакета java.util. Пример использования имен пакетов при импортировании java. util.* в предыдущем примере:
//: holding/StackCollision.java import net.mindview.util.*:
public class StackCol1ision {
public static void main(String[] args) {
net.mindview.util.Stack
new net.mindview.util.Stack
stack.push(s): whi led stack, empty О)
System, out. pri nt (stack. popO + " "); System, out. printlnO; java.util.Stack
new java.util.Stack
stack2.push(s); while( !stack2 emptyO)
System.out print(stack2.pop() + " ").
}
fleas has dog My fleas has dog My *///:-
В java.util нет общего интерфейса Stack — вероятно, из-за того, что имя было задействовано в исходной, неудачно спроектированной версии java. util.Stack для Java 1.0. Хотя класс java.util.Stack существует, LinkedList обеспечивает более качественную реализацию стека, и решение net.mindview.util. Stack является предпочтительным.
Множество
В множествах (Set) каждое значение может храниться только в одном экземпляре. Попытки добавить новый экземпляр эквивалентного объекта блокируются. Множества часто используются для проверки принадлежности, чтобы вы могли легко проверить, принадлежит ли объект заданному множеству. Следовательно, важнейшей операцией Set является операция поиска, поэтому на практике обычно выбирается реализация HashSet, оптимизированная для быстрого поиска.
Set имеет такой же интерфейс, что и Collection. В сущности, Set и является Collection, но обладает несколько иным поведением (кстати, идеальный пример использования наследования и полиморфизма: выражение разных концепций поведения). Пример использования HashSet с объектами Integer:
//• hoiding/SetOfInteger.java import java.util.*,
public class SetOfInteger {
public static void main(String[] args) { Random rand = new Random(47); Set