====== Семинар 4 ====== Классы и интерфейсы в языке Java могут быть шаблонными (generic), т.е. иметь типовые параметры. При создании объекта такого класса нужно указывать конкретные значения его типовых параметров. Пример использования generic-ов: классы, предназначенные для хранения упорядоченной пары и упорядоченной тройки объектов public class TwoTuple { public final A first; public final B second; public TwoTuple(A a, B b) { first = a; second = b; } public String toString() { return "(" + first + ", " + second + ")"; } } public class ThreeTuple extends TwoTuple { public final C third; public ThreeTuple(A a, B b, C c) { super(a, b); third = c; } public String toString() { return "(" + first + ", " + second + ", " + third +")"; } } Пример работы с этими классами: TwoTuple tuple0 = new TwoTuple(new Integer(10), "text"); System.out.println(tuple0.toString()); // напечатается (10, text) ThreeTuple tuple1 = new ThreeTuple(new Integer(10), "text", new Double(0.1)); System.out.println(tuple1.toString()); // напечатается (10, text, 0.1) ===== Задание 4.1 ===== Приведем одну из возможных реализаций двусвязного списка: public class MyLinkedList { private static class Node{ E element = null; Node next = null; Node previous = null; Node (E element){ this.element = element; } } private Node head = null; private Node tail = null; private int size = 0; public void addLast(E element){// добавляет новый элемент в конец списка Node tmpNode = new Node(element); if(tail == null){ head = tmpNode; tail = head; } else{ tail.next = tmpNode; tmpNode.previous = tail; tail = tmpNode; } } public String toString(){// "преобразует" список в строку if(head == null) return null; Node tmpNode = head; String tmpString = "[" + tmpNode.element.toString(); while (tmpNode != tail){ tmpNode = tmpNode.next; tmpString = tmpString.concat(", " + tmpNode.element.toString()); }; tmpString = tmpString.concat("]"); return tmpString; } } Пример использования: MyLinkedList list = new MyLinkedList(); for (int i = 0; i < 10; i++) list.addLast(new Integer(i)); System.out.println(list.toString());// напечатается [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] Допишите следующие методы: - Добавление нового элемента в начало списка. - Удаление первого/последнего элемента. - Получение значения первого/последнего элемента. - Получение размера списка. - Получение значения ''i''-го элемента списка. - Удаление ''i''-го элемента списка. ===== Указание к оформлению решения ===== Новые методы должны называться в соответствии с методами класса [[http://parallels.nsu.ru/~kuznecov/JavaDoc/api/java/util/LinkedList.html|java.util.LinkedList]]. ===== Задание 4.2 ===== С помощью получившегося двусвязного списка напишите решение [[http://home.gwu.edu/~maxal/josephus.pdf|задачи Иосифа Флавия]]. ;;# [[java:elective:lesson5|Следующий семинар >>>]] ;;#