410013796724260
• Webmoney
R335386147728
Z369087728698
Связанный массив LinkedListLinkedList — реализует интерфейсы List, Dequeue, Queue и является представителем двунаправленного списка, где каждый элемент структуры содержит указатели на предыдущий и следующий элементы. Итератор поддерживает обход в обе стороны. LinkedList реализует методы получения, удаления и вставки в начало, середину и конец списка, а также позволяет добавлять любые элементы, в том числе и null. Конструкторы LinkedListКласс LinkedList имеет следующие два конструктора :
Создание LinkedList объектаДля создания нового LinkedList объекта можно использовать один из конструкторов, например: List<String> list = new LinkedList<String>(); В графическом виде объект можно представить в следующем виде:
Созданный объект list, содержит свойства header и size. header — это псевдоэлемент списка. Его значение всегда равно null, a свойства next и prev всегда указывают на первый и последний элемент списка соответственно. Так как список вновь созданного объекта пустой, свойства next и prev указывают сами на себя (т.е. на элемент header). Следовательно, выполняется следующее тождество. header.next = header.prev = header; Добавление элемента в связанный массив LinkedListДля добавления элемента в массив LinkedList можно использовать методы
Например:
list.add("Школа");
Класс LinkedList включает статический внутренний класс Entry, с помощью которого создаются новые элементы.
private static class Entry<E>
{
E element;
Entry<E> next;
Entry<E> prev;
Entry(E element, Entry<E> next, Entry<E> prev)
{
this.element = element;
this.next = next;
this.prev = prev;
}
}
Для добавления нового элемента в LinkedList необходимо выполнить две итерации:
В результате графически объект можно представить в следующем виде:
Методы LinkedListКласс LinkedList содержит ряд методов для управления элементами, среди которых можно выделить следующие:
Пример связанного списка LinkedList :
import java.util.LinkedList;
public class CollectionApp
{
public static void main(String[] args)
{
LinkedList<String> states = new LinkedList<String>();
// Добавление элементов в список
states.add ("Германия" );
states.add ("Франция" );
// добавляем элемент в конец
states.addLast ("Великобритания");
// добавляем элемент в первую позицию
states.addFirst("Испания" );
// добавляем элемент с индексом 1
states.add (1, "Италия" );
System.out.printf("В списке %d элементов \n",
states.size());
System.out.println(states.get(1));
states.set(1, "Дания");
for (String state : states){
System.out.println(state);
}
// проверка на наличие элемента в списке
if (states.contains("Германия")){
System.out.println(
"Список содержит государство Германия");
}
states.remove("Германия");
states.removeFirst(); // удаление первого элемента
states.removeLast(); // удаление последнего элемента
LinkedList<Person> people;
people = new LinkedList<Person>();
people.add (new Person("Алекс"));
people.addFirst(new Person("Митя" ));
people.addLast (new Person("Прохор"));
people.remove(1); // удаление второго элемента
for(Person p : people){
System.out.println(p.getName());
}
Person first = people.getFirst();
// вывод в консоль первого элемента
System.out.println(first.getName());
}
}
class Person
{
private String name;
public Person(String value)
{
name=value;
}
String getName()
{
return name;
}
}
В примере LinkedList создаются и используются два списка: для строк и для объектов класса Person. При этом в дополнение к методам addFirst/removeLast и т.д., доступны стандартные методы, определенные интерфейсом Collection: add(), remove, contains, size и другие. Поэтому можно использовать разные методы для одного и того же действия. Например, добавление в самое начало списка можно сделать так :
states.addFirst("Испания");
// а можно сделать так:
states.add(0, "Испания");
Отличие LinkedList от ArrayListArrayList - это реализованный на основе массива список объектов. LinkedList — это связный список объектов. LinkedList выполняет вставку и удаление элементов в списке за постоянное время (определение позиции для вставки или удаления не рассматривается). В большинстве случаев LinkedList проигрывает ArrayList и по потребляемой памяти и по скорости выполнения операций. Если в алгоритме предусмотрена активная работа (вставка/удаление) в середине списка или в случаях, когда необходимо гарантированное время добавления элемента в список, то целесообразно использовать LinkedList. Наверх |
