Приветствую Вас ГостьСреда, 15.05.2024, 00:09

Программирование на Java, Android, Delphi


Блог

Главная » 2013 » Март » 14 » Collections Framework: класс LinkedList
09:35
Collections Framework: класс LinkedList
Класс LinkedList наследуется от класса AbstractSequentialList и реализует интерфейсы: List, Deque и Queue, то есть он может вести себя как простой список объектов с доступом через индекс (через интерфейс List), однонаправленная очередь (через интерфейс Queue) или двунаправленная очередь или стек (через интерфейс Deque). Физически объекты в данной коллекции хранятся в двунаправленном списке. Этот класс является также обобщенным и может содержать любые объекты. Этот класс имеет несколько методов которые логически делают схожие действия: добавляют элемент в начало или конец очереди, извлекают из начала или конца очереди. Часть из них в случае неудачи возвращает булевое значение а часть вызывает исключительную ситуацию.

class Coordinate{
private int X;
private int Y;

public Coordinate(int X, int Y) {
this.X = X;
this.Y = Y;
}

@Override
public String toString() {
return "X: " + X + ", Y: " + Y;
}

@Override
public boolean equals(Object obj) {
if(obj instanceof Coordinate){
Coordinate c = (Coordinate)obj;
return c.X == this.X && c.Y == this.Y;
}else
return super.equals(obj);
}
}

void CollectionToTextArea(LinkedList<Coordinate> c, JTextArea ta){
for(Coordinate item: c){ta.append(item.toString() + "\n");
}
ta.append("--------------------------------------------------" + "\n");
}

void CoordinateToTextArea(Coordinate c, JTextArea ta, String comment){
if(c != null){
ta.append(comment + c.toString() + "\n");
}
}

//выводим все содержимое очереди в текстовую область (при этом очередь очищается)
void RemoveAllQueueElements(Queue <Coordinate> q){
Coordinate c = null;
c = q.poll();
while(c != null) {
jTextArea1.append("Удалили из очереди: " + c.toString() + "\n");
c = q.poll();
}
}



private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// создаем коллекцию координат и будем через разные интерфейсы работать с ней
LinkedList<Coordinate> ll1 = new LinkedList<Coordinate>();

//работа с LinkedList как со списком через интерфейс List
List list_itf = ll1;
list_itf.add(new Coordinate(1, 1));
list_itf.add(0, new Coordinate(2, 2));

//работа с коллекцией как с однонаправленной очередью через интерфейс Queue
Queue <Coordinate> q_itf = ll1;
//добавляем элементы в очередь
q_itf.offer(new Coordinate(3, 3));
q_itf.offer(new Coordinate(4, 4));
q_itf.offer(new Coordinate(5, 5));
//выводим в текстовую область всю коллекцию
CollectionToTextArea(ll1, jTextArea1);

Coordinate c = null;

//element() возвращает элемент из головы очереди не удаляя его, если очередь пустая - будет ИС
c = q_itf.element();
CoordinateToTextArea(c, jTextArea1, "element(): ");

//peek() возвращает элемент из головы очереди не удаляя его, если очередь пустая - вернет false
c = q_itf.peek();
CoordinateToTextArea(c, jTextArea1, "peek(): ");

//remove() удаляет элемент из головы очереди и возвращает его, если очередь пустая - будет ИС
c = q_itf.remove();
CoordinateToTextArea(c, jTextArea1, "remove(): ");

//poll() удаляет элемент из очереди и возвращает его, если очередь пустая - вернет null
c = q_itf.poll();
CoordinateToTextArea(c, jTextArea1, "poll(): ");


//выталкиваем всю очередь в текстовую область
RemoveAllQueueElements(q_itf);
jTextArea1.append("Проверяем - очередь должна быть пустой \n");
CollectionToTextArea(ll1, jTextArea1);



//работа с коллекцией как двунаправленной очередью через интерфейс Deque
//здесь возможна вставка и удаление с обоих концов очереди
Deque <Coordinate> d_itf = ll1;

//вставляем в начало очереди addFirst()
d_itf.addFirst(new Coordinate(4, 4));
d_itf.addFirst(new Coordinate(3, 3));
d_itf.addFirst(new Coordinate(2, 2));
d_itf.addFirst(new Coordinate(1, 1));
d_itf.addFirst(new Coordinate(0, 0));
//вставляем в начало очереди offerFirst()
d_itf.offerFirst(new Coordinate(-1, -1));
d_itf.offerFirst(new Coordinate(-2, -2));
d_itf.offerFirst(new Coordinate(-3, -3));

//вставляем в конец очереди addLast()
d_itf.addLast(new Coordinate(5, 5));
d_itf.addLast(new Coordinate(6, 6));
d_itf.addLast(new Coordinate(7, 7));

//вставляем в конец очереди offer()
d_itf.offer(new Coordinate(8, 8));
d_itf.offer(new Coordinate(9, 9));
//вставляем в конец очереди offerLast()
d_itf.offerLast(new Coordinate(10, 10));
d_itf.offerLast(new Coordinate(11, 11));

CollectionToTextArea(ll1, jTextArea1);

//удаляем элементы из начала очереди
c = d_itf.removeFirst();
CoordinateToTextArea(c, jTextArea1, " удалили removeFirst(): ");
c = d_itf.removeFirst();
CoordinateToTextArea(c, jTextArea1, " удалили removeFirst(): ");
c = d_itf.removeFirst();
CoordinateToTextArea(c, jTextArea1, " удалили removeFirst(): ");

//удаляем элементы из конца очереди
c = d_itf.removeLast();
CoordinateToTextArea(c, jTextArea1, " удалили removeLast(): ");
c = d_itf.removeLast();
CoordinateToTextArea(c, jTextArea1, " удалили removeLast(): ");
c = d_itf.removeLast();
CoordinateToTextArea(c, jTextArea1, " удалили removeLast(): ");
c = d_itf.removeLast();
CoordinateToTextArea(c, jTextArea1, " удалили removeLast(): ");

//выводим коллекцию после удаления
CollectionToTextArea(ll1, jTextArea1);
//выталкиваем всю очередь в текстовую область (очищаем коллекцию)
RemoveAllQueueElements(q_itf);
//проверяем - коллекция пустая
CollectionToTextArea(ll1, jTextArea1);

//работаем с коллекцией как со стеком через интерфейс Deque
for(int i = 0; i < 100; i ++) d_itf.push(new Coordinate(i, i));
CollectionToTextArea(ll1, jTextArea1);

//выводим содержимое стека, так как pop() генерирует ИС если нет данных
//то помещаем в блок try-catch
try{
while(true){
c = d_itf.pop();
CoordinateToTextArea(c, jTextArea1, "достали из стека : ");
}
}
catch(NoSuchElementException ex){
jTextArea1.append("Исключительная ситуация - переполнение стека \n");
}

//теперь протестируем итератор
//вставляем в начало очереди addFirst()
d_itf.addFirst(new Coordinate(4, 4));
d_itf.addFirst(new Coordinate(3, 3));
d_itf.addFirst(new Coordinate(2, 2));
d_itf.addFirst(new Coordinate(1, 1));
d_itf.addFirst(new Coordinate(0, 0));

Iterator <Coordinate> it1 = ll1.iterator();
jTextArea1.append("Тестируем итератор для последовательного перебора коллекции \n");
while(it1.hasNext()) {jTextArea1.append(it1.next().toString() + "\n");
}

}
Категория: Java (Библиотека, пакеты Java) | Просмотров: 749 | Добавил: alex | Теги: Java, LinkedList, программист в Рыбинске, Collections Framework, Разработка программного обеспечения, заказать программу | Рейтинг: 5.0/1
Категории раздела
Java (Общие вопросы) [17]
Java (Библиотека, пакеты Java) [17]
Java (Разработка программного обеспечения на Java) [5]
Java (Среда разработки NetBeans) [5]
JSF + PrimeFaces [21]
Java EE [11]
Разное [3]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Март 2013  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031
Архив записей