# Linked Lists

LinkedList — реализует интерфейс List. Является представителем двунаправленного списка, где каждый элемент структуры содержит указатели на предыдущий и следующий элементы.

Итератор поддерживает обход в обе стороны. Реализует методы получения, удаления и вставки в начало, середину и конец списка. Позволяет добавлять любые элементы, в том числе и null.

Класс LinkedList -это обощенный класс со следующим объявлением.

```
class LinkedList<T>
```

T - тип сохраняемого объекта.Этот класс имеет следующие два конструктора:

```
LinkedList()
LinkedList(Collection<? extends E> c)
```

Мы можем использовать следующие методы при работе с данной коллекцией:

Для добавления элементов в начало списка:

```
addFirst() или offerFirst()
```

Для добавления элементов в конец списка:

```
addLast() или offerLast()
```

Чтобы получить первый элемент используют:

```
getFirst() или peekFirst()
```

Для удаления первого элемента можно использовать следующие методы:

```
removeFirst() или pollFirst()
```

Для удаления последнего элемента применяют:

```
removeLast() или pollLast()
```

Пример:

```
import java.util.*; 

class LinkedListExample { 
  public static void main(String args[]) { 

    LinkedList<String> list = new LinkedList<String>(); 

    // Add elements to the linked list. 
    list.add("F"); 
    list.add("B"); 
    list.add("D"); 
    list.add("E"); 
    list.add("C"); 
    list.addLast("Z"); 
    list.addFirst("A"); 

    System.out.println("Contents of list: " + list); 

    // Remove elements from the linked list. 
    list.remove("F"); 

    // Get and set a value. 
    String val = list.get(2); 
    list.set(2, val + " Changed"); 

    System.out.println("List after change: " + list); 
  } 
}
```

Вопрос 1.

Чем принципиально отличается LinkedList от ArrayList?

Вопрос 2.

Чем отличается метод offerFirst() от addFirst()?
