Урок 17

Интерфейс List и Реализации


1. Интерфейс List

Интерфейс List сохраняет последовательность добавления элементов и позволяет осуществлять доступ к элементу по индексу.

List добавляет следующие методы:

  1. void add(int index, Е obj) - вставляет obj в вызывающий список в позицию, указанную в index. Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются.
  2. bооlеаn addAll (int index,Collection<? extends Е> с) - вставляет все элементы в вызывающий список, начиная с позиции, переданной в index. Все ранее существовавшие элементы за точкой вставки смещаются вверх. То есть никакие элементы не перезаписываются. Возвращает true, если вызывающий список изменяется, и false  в противном случае. 
  3. Е get (int index) - возвращает объект, сохраненный в указанной позиции вызывающего списка.
  4. int indexOf(Object obj) - возвращает индекс первого экземпляра obj в вызывающем списке. Если obj не содержится в списке, возвращается 1.
  5. int lastlndexOf(Object obj) - возвращает индекс последнего экземпляра obj в вызывающем списке. Если obj не содержится в списке, возвращается 1.  
  6. Listlterator listlterator() - возвращает итератор, указывающий на начало списка.
  7. Listlterator listlterator(int index) - возвращает итератор, указывающий на заданную позицию в списке.
  8. Е remove(int index) - удаляет элемент из вызывающего списка в позиции index и возвращает удаленный элемент. Результирующий список уплотняется, то есть элементы, следующие за удаленным, сдвигаются на одну позицию назад.
  9. Е set (int index, Е obj) - присваивает obj элементу, находящемуся в списке в позиции index.
  10. default void sort(Comparator<? super E> c) - сортирует список, используя заданный компаратор (добавлен в версии JDК 8).
  11. List subList (int start, int end) - возвращает список, включающий элементы от start до end-1 из вызывающего списка. Элементы из возвращаемого списка также сохраняют ссылки в вызывающем списке.

2. Класс ArrayList

Класс ArrayList реализует интерфейс List. ArrayList поддерживает динамические массивы, которые могут расти по мере необходимости. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.

Объект класса ArrayList, содержит свойства elementData и size. Хранилище значений elementData есть ни что иное как массив определенного типа (указанного в generic).

У этого класса есть следующие конструкторы: 

  • ArrayList ()
  • ArrayList(Collection <? extends Е> с)
  • ArrayList(int capacity) 

Достоинства класса ArrayList

  • Быстрый доступ по индексу.
  • Быстрая вставка и удаление элементов с конца.

Недостатки класса ArrayList:

  • Медленная вставка и удаление элементов в середину.

Методы класса ArrayList для добавления элементов:

  1. boolean add(E obj) - добавляет obj к вызывающей коллекции. Возвращает true, если obj был добавлен к коллекции. (Интерфейс Collection)
  2. void add(int index, Е obj) - вставляет obj в вызывающий список в позицию, указанную в index. Любые ранее вставленные элементы за указанной позицией вставки смещаются вверх. То есть никакие элементы не перезаписываются. (Интерфейс List)
  3. Е set (int index, Е obj) - присваивает obj элементу, находящемуся в списке в позиции index. (Интерфейс List)
  4. boolean addAll (Collection<? extends Е> с) - добавляет все элементы к вызывающей коллекции. Возвращает true, если операция удалась (то есть все элементы добавлены). В противном случае возвращает false. (Интерфейс Collection)

Методы класса ArrayList для удаления элементов:

  1. boolean remove(Object obj) - удаляет один экземпляр obj из вызывающей коллекции. Возвращает true, если элемент удален. В противном случае возвращает false. (Интерфейс Collection)
  2. Е remove(int index) - удаляет элемент из вызывающего списка в позиции index и возвращает удаленный элемент. Результирующий список уплотняется, то есть элементы, следующие за удаленным, сдвигаются на одну позицию назад. (Интерфейс List)
  3. boolean removeAll(Collection<?> с) - удаляет все элементы из вызывающей коллекции. Возвращает truе, если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false. (Интерфейс Collection)
  4. boolean retainAll(Collection<?> с) - удаляет все элементы кроме входящих из вызывающей коллекции. Возвращает true, если в результате коллекция изменяется (то есть элементы удалены). В противном случае возвращает false. (Интерфейс Collection)
  5. void clear() - удаляет все элементы вызывающей коллекции. (Интерфейс Collection)

Пример 1. Использование методов класса ArrayList

public class ArrayListDemo1 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<>();

        System.out.println("Initial size of arrayList: "
                + arrayList.size());

        arrayList.add("C");
        arrayList.add("A");
        arrayList.add("E");
        arrayList.add("B");
        arrayList.add("D");
        arrayList.add("F");
        arrayList.add(1, "A2");
        arrayList.set(0, "C2");

        System.out.println("Size of arrayList after additions: "
                + arrayList.size());

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

        arrayList.remove("F");
        arrayList.remove(2);

        System.out.println("Size of arrayList after deletions: "
                + arrayList.size());
        System.out.println("Contents of arrayList: " + arrayList);

        List<String> removeElements = new ArrayList<>();
        removeElements.add("C2");
        removeElements.add("A2");
        removeElements.add("AA");

        arrayList.removeAll(removeElements);
        System.out.println("Size of arrayList after removeAll: "
                + arrayList.size());
        System.out.println("Contents of arrayList after removeAll: "
                + arrayList);
    }
}

Пример 2. Использование методов addAll(), clear() класса ArrayList

import java.util.ArrayList;
import java.util.List;

public class ArrayListDemo2 {
    public static void main(String[] args) {
        List<String> arrayList1 = new ArrayList<>();
        List<String> arrayList2 = new ArrayList<>();

        arrayList1.add("A");
        arrayList1.add("B");
        arrayList1.add("C");
        arrayList1.add("D");
        arrayList1.add("E");
        arrayList1.add("F");
        System.out.println(arrayList1);

        arrayList2.add("1");
        arrayList2.add("2");

        arrayList1.addAll(3, arrayList2);
        System.out.println(arrayList1);

        arrayList1.clear();
        System.out.println(arrayList1);
    }
}

Пример 3. Использование методов addAll()clear() класса ArrayList

import java.util.ArrayList;
import java.util.List;

public class ArrayListDemo3 {
    public static void main(String[] args) {
        List<String> arrayList1 = new ArrayList<>();
        List<String> arrayList2 = new ArrayList<>();

        arrayList1.add("A");
        arrayList1.add("A");
        arrayList1.add("B");
        arrayList1.add("C");
        arrayList1.add("D");
        arrayList1.add("E");
        arrayList1.add("F");
        arrayList1.add("F");

        arrayList2.add("F");
        arrayList2.add("FF");
        arrayList2.add("E");

        arrayList1.retainAll(arrayList2);
        System.out.println(arrayList1);
    }
}

Имеются два варианта метода toArray(), которые объявлены в Collection:

  • Object [] toArray()
  • <Т> Т [] toArray(Т массив[])

Пример 4. Получение массива из коллекции типа ArrayList

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class ArrayListDemo4 {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<>();

        arrayList.add("C");
        arrayList.add("A");
        arrayList.add("E");
        arrayList.add("B");
        arrayList.add("D");
        arrayList.add("F");
        arrayList.add(null);
        //1 вариант
        Object[] objectArray = arrayList.toArray();
        System.out.println(Arrays.toString(objectArray));

        //2 вариант
        String[] stringArray1 = new String[arrayList.size()];
        arrayList.toArray(stringArray1);
        System.out.println(Arrays.toString(stringArray1));

        //3 вариант
        String[] stringArray2 = arrayList.toArray(new String[0]);
        System.out.println(Arrays.toString(stringArray2));
    }
}


0 comments
Leave your comment: