====== Семинар 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|Следующий семинар >>>]]
;;#