Коллекции

Содержание

Слайд 2

Интерфейс Comparable public interface Comparable { public int compareTo(T obj); }

Интерфейс Comparable
public interface Comparable
{ public int

compareTo(T obj); }
Слайд 3

Интерфейс Comparable В интерфейсе Comparable объявлен всего один метод compareTo(T obj),

Интерфейс Comparable

В интерфейсе Comparable объявлен всего один метод compareTo(T obj), предназначенный для

реализации упорядочивания объектов класса. Его удобно использовать при сортировке упорядоченных списков или массивов объектов.
Данный метод сравнивает объект, вызывающий метод с объектом obj. В отличие от метода equals, который возвращает true или false, compareTo возвращает:
     0, если значения равны;
 Отрицательное значение, если вызывающий объект меньше параметра;
 Положительное значение ,  если вызывающий объект больше параметра.
Метод может выбросить исключение ClassCastException, если типы объектов не совместимы при сравнении.
Необходимо помнить, что  аргумент метода compareTo имеет тип сравниваемого объекта класса.
Классы Byte, Short, Integer, Long, Double, Float, Character, String , Date уже реализуют интерфейс Comparable.
См. на сл. слайде пример реализующий интерфейс Comparable.
Слайд 4

Интерфейс Comparable

Интерфейс Comparable

Слайд 5

Интерфейс Comparable

Интерфейс Comparable

Слайд 6

Интерфейс Comparable

Интерфейс Comparable

Слайд 7

Интерфейс Comparable

Интерфейс Comparable

Слайд 8

Интерфейс Comparator public interface Comparator { int compare(T obj1, T obj2); equals(T obj). }

Интерфейс Comparator
public interface Comparator
{ int compare(T

obj1, T obj2);
equals(T obj).
}
Слайд 9

Интерфейс Comparator В интерфейсе Comparator объявлено два метода compare(T obj1, T

Интерфейс Comparator

В интерфейсе Comparator объявлено два метода compare(T obj1, T obj2) и equals(T obj).
compare(T

obj1, T obj2) – так же, как и метод compareTo интерфейса Comparable, упорядочивает объекты класса. Точно так же на выходе получает 0, положительное значение и отрицательное значение.
Метод может выбросить исключение ClassCastException, если типы объектов не совместимы при сравнении.
Основным отличием интерфейса Comparator от Comparable является то, что вы можете создавать несколько видов независимых сортировок.
equals(T obj)  - сравнивает компараторы объектов. Переопределяется очень редко.
См. на сл. слайде пример реализующий интерфейс Comparator.
Слайд 10

Интерфейс Comparator

Интерфейс Comparator

Слайд 11

Интерфейс Comparator

Интерфейс Comparator

Слайд 12

Интерфейс Comparator

Интерфейс Comparator

Слайд 13

Интерфейс Comparator

Интерфейс Comparator

Слайд 14

Интерфейс Set public interface Set extends Collection { int size(); boolean

Интерфейс Set
public interface Set extends Collection
{ int size();
boolean isEmpty();
boolean

contains(Object element);
boolean add(E element);
boolean remove(Object element);
Iterator iterator();
boolean containsAll(Collection c);
boolean addAll(Collection c);
boolean removeAll(Collection c);
void clear();
Object[] toArray();

}
Слайд 15

Интерфейс SortedSet public interface SortedSet extends Set { Comparator comparator(); E

Интерфейс SortedSet
public interface SortedSet extends Set
{ Comparator

E> comparator();
E first();
E last();
SortedSet headSet(E toElement);
SortedSet subSet(E fromElement,
E toElement);
SortedSet tailSet(E fromElement);
}
Слайд 16

Интерфейс Set и SortedSet Интерфейс Set из пакета java.util, расширяющий интерфейс

Интерфейс Set и SortedSet

Интерфейс Set из пакета java.util, расширяющий интерфейс Collection, описывает неупорядоченную

коллекцию, не содержащую повторяющихся элементов. Это соответствует математическому понятию множества (set) . Новые методы в интерфейс Set не добавлены, просто метод add() не станет добавлять еще одну копию элемента, если такой элемент уже есть в множестве.
Интерфейс SortedSet  расширяющий интерфейс Set, описывает упорядоченное множество, отсортированное по естественному порядку возрастания его элементов или по порядку, заданному реализацией интерфейса Comparator. Элементы не нумеруются, но есть понятие первого, последнего, большего и меньшего элемента. Доп-е методы интерфейса отражают эти понятия:
Comparator comparator () — возвращает способ упорядочения коллекции; 
object first ()— возвращает первый, меньший элемент коллекции;
SortedSet headset (Object toEiement) — возвращает начальные, меньшие элементы до элемента toElement исключительно;
object last () — возвращает последний, больший элемент коллекции;
SortedSet subset(Object fromElement, Object toEiement) — возвращает подмножество коллекции от элемента fromElement включительно до элемента toElement исключительно;
SortedSet tailSet (Object fromElement) — возвращает последние, большие элементы коллекции от элементаf romElement включительно.
Платформа Java содержит три класса реализации интерофейса Set: HashSet, TreeSet и LinkedHashSet.
Слайд 17

Классы HashSet, TreeSet, LinkedHashSet Конструкторы класса HashSet : HashSet() HashSet(int capacity)

Классы HashSet, TreeSet, LinkedHashSet
Конструкторы класса HashSet :
HashSet()
HashSet(int capacity)
HashSet(int capacity, float  loadFactor)
HashSet(Collection c)
Конструкторы класса TreeSet

:
TreeSet ()
TreeSet (Comparator с) 
TreeSet (Collection coll)
TreeSet (SortedMap sf)
Слайд 18

Классы HashSet, TreeSet, LinkedHashSet Класс HashSet наследуется от абстрактного суперкласса AbstractSet

Классы HashSet, TreeSet, LinkedHashSet

Класс HashSet наследуется от абстрактного суперкласса AbstractSet и реализует интерфейс Set,

используя хэш-таблицу для хранения коллекции. Ключ (хэш-код) используется вместо индекса для доступа к данным, что значительно ускоряет поиск определенного элемента.
В классе HashSet четыре конструктора:
Hashset () — создает пустой объект с показателем загруженности 0,75;
HashSet (int capacity) — создает пустой объект с начальной емкостью capacity и показателем загруженности 0,75;
HashSet (int capacity, float loadFactor) — создает пустой объект с начальной емкостью capacity и показателем загруженности loadFactor ;
HashSet (Collection coll) — создает объект, содержащий все элементы коллекции coll , с емкостью, равной удвоенному числу элементов коллекции coll , но не менее 11, и показателем загруженности 0,75.
Класс TreeSet реализован как бинарное дерево поиска, значит, его элементы хранятся в упорядоченном виде. Это значительно ускоряет поиск нужного элемента.  Обработка операций удаления и вставки объектов происходит медленнее, чем в хэш-множествах, но быстрее, чем в списках. Класс TreeSet полностью реализует интерфейс SortedSet
В классе TreeSet четыре конструктора:
TreeSet () — создает пустой объект с естественным порядком элементов;
TreeSet (Comparator с) — создает пустой объект, в котором порядок зад-ся объектом сравнения с;
TreeSet (Collection coll) — создает объект, содержащий все элементы коллекции coll , с естественным порядком ее элементов;
TreeSet (SortedMap sf) — создает объект, содержащий все эл-ты отображения sf , в том же порядке.
TreeSet коллекция которая позволяет хранить объекты в отсортированном виде. Для собственных классов необходимо реализовать интерфейс Comparable или Comparator, в противном случае, при добавлении второго элемента вы получите ошибку: cannot be cast to java.lang.Comparable
Слайд 19

Классы HashSet, TreeSet, LinkedHashSet LinkedHashSet - упорядоченная версия HashSet, которая обслуживает

Классы HashSet, TreeSet, LinkedHashSet

LinkedHashSet - упорядоченная версия HashSet, которая

обслуживает дважды связанный список и его элементы. Следует использовать данный класс вместо HashSet, когда Вам важен порядок итерации. Когда вы проходите через HashSet - порядок непредсказуем, в то время как LinkedHashSet позволяет Вам проходить через элементы в том порядке, в котором они были вставлены.
Слайд 20

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Слайд 21

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet Не смотря на то,

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Не смотря на

то, что все три рассматриваемые коллекции реализуют один тот же интерфейс, они отличаются друг от друга. Главное различие — это порядок хранения элементов. HashSet хранит элементы в случайном (на первый взгляд) порядке. Дело в том, что для быстрого поиска HashSet расчитывает для каждлого элемента hashCode и именно по этому ключу ищет и упорядочивает элементы внутри себя. TreeSet, в отличии от HashSet, хранит элементы упорядоченно, то есть в каком бы порядке мы не добавляли и не удаляли элементы, коллекция останется строго упорядоченной. LinkedHashSet используется в том случае, если нам необходимо помнить порядок добавления элементов. Поиск по этой коллекции происходит также по hashCode, но порядок будет всегда совпадать с очерёдностью добавления.
В конструкторе класса SetsSamples создаются объекты наших коллекции и вызывается метод fillSets, который и добавит count случайных чисел в только что созданные объекты. В этом методе мы используем класс Random (который, кстати, также содержится в пакете java.utils). Этот класс используется для получения последовательностей случайных чисел. В этом примере мы используем только один из его методов — это nextInt. Данный метод каждый раз будет возвращать случайное число в пределах от 0 до переданного параметром значения.
Для каждой коллекции вызываются методы toString() и size(). Метод toString() возвращает строку, содержащую элементы коллекции, перечисленные через запятую. Список справа и слева ограничивается квадратными скобками «[" и "]» (например [1, 2, 5]). size() возвращает количество элементов в коллекции.
Метод removeMax удаляет максимальный элемент из коллекции treeSet. Так, как TreeSet хранит элементы упорядоченно, метод last() (возвращает последний элемент коллекции) вернёт нам наибольший элемент. С помощью метода remove мы удалим этот элемент из коллекции.
У нас есть возможность создавать коллекцию, сразу добавляя в неё элементы из другой. Этим и воспользуемся в методе create для копирования коллекции.
removeAll удалит все элементы linkedHashSet из hashSet.
retainAll — наоборот, оставит в hashSet все элементы, которые есть в linkedHashSet
Слайд 22

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Слайд 23

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Интерфейс Set и классы HashSet, TreeSet, LinkedHashSet

Слайд 24

Интерфейс Set и класс TreeSet Пример .

Интерфейс Set и класс TreeSet

Пример .