Базовые и утилитные классы Java

Содержание

Слайд 2

План лекции Пакет java.lang и базовые классы Классы Class и Object

План лекции

Пакет java.lang и базовые классы
Классы Class и Object
Классы-обертки примитивных типов
Класс

Math
Классы String и StringBuffer
Пакет java.util и его классы
Коллекции
Слайд 3

Пакет java.lang Импортируется по умолчанию (неявно) Класс Class Класс Object Классы-обертки

Пакет java.lang

Импортируется по умолчанию (неявно)
Класс Class
Класс Object
Классы-обертки примитивных типов
Класс Math
Классы String

и StringBuffer
Класс Throwable, базовый класс исключений
Классы Thread и ThreadGroup
Прочие фундаментальные типы
System, Runtime, Process, ClassLoader, SecurityManager, Compiler, Cloneable, Comparable
Слайд 4

Класс Class Является метаклассом для всех классов Экземпляры содержат описания классов,

Класс Class

Является метаклассом для всех классов
Экземпляры содержат описания классов, загружаемых JVM
Не

имеет доступного конструктора
Содержит методы для работы с классами и их методами
Лежит в основе т.н. "рефлексии"
Слайд 5

Класс Class При загрузке JVM файла .class создается объект класса Class

Класс Class

При загрузке JVM файла .class создается объект класса Class
При создании

любого объекта создаются
Сам создаваемый объект
Объект типа Class описания класса объекта
Объекты типа Class описания классов-предков
Объект типа Class описания класса Class
Метод forName(String name) получения объекта описания типа Class по имени класса
Слайд 6

Класс Object Является суперклассом для всех классов (включая массивы) Переменная этого

Класс Object

Является суперклассом для всех классов (включая массивы)
Переменная этого типа может

ссылаться на любой объект (но не на переменную примитивного типа)
Его методы наследуются всеми классами
Реализует базовые операции с объектами
Слайд 7

Методы класса Object Получение строкового представления объекта String toString() Получение ссылки

Методы класса Object

Получение строкового представления объекта String toString()
Получение ссылки на описание

класса объекта final Class getClass()
Клонирование объекта (получение копии) protected Object clone()
Проверка равенства объектов boolean equals(Object obj)
Получение хэш-кода объекта int hashCode()
Метод завершения работы с объектом protected void finalize()
Методы обслуживания блокировок в многопоточных приложениях void wait(...), void notify(), void notifyAll()
Слайд 8

Клонирование объектов Считается, что результатом клонирования является копия объекта Массивы поддерживают

Клонирование объектов

Считается, что результатом клонирования является копия объекта
Массивы поддерживают операцию клонирования
В

классе Object метод clone() является защищенным
Метод clone() реализуется в конкретном классе
Никто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса
Однако существует ряд соглашений, регламентирующих реализацию метода clone()

int[] arrayCopy = (int []) array.clone();

Слайд 9

Простое клонирование объектов, ряд соглашений Класс должен переопределять метод clone() Класс

Простое клонирование объектов, ряд соглашений

Класс должен переопределять метод clone()
Класс должен реализовывать

интерфейс-маркер Cloneable
Результат клонирования должен быть получен вызовом super.clone()
Результатом работы метода clone() должна быть точная копия объекта

public Object clone() {
Object result = null;
try {
result = (ThisCurrentType) super.clone();
} catch (CloneNotSupportedException ex) { }
return result;
}

Слайд 10

Особенности клонирования В результате клонирования скопировалась ссылка на объект a, но

Особенности клонирования

В результате клонирования скопировалась ссылка на объект a, но не

объект, с которым связана ссылка
При использовании результатов клонирования необходимо явное приведение типа
Начиная с Java5 для массивов можно не выполнять явное приведение типа, но только для массивов

int[][] a = {{1, 2, 3}, {4, 5, 6}};
int[][] b = (int[][]) a.clone();
System.out.println(a[0][0]);
b[0][0] = 9;
System.out.println(a[0][0]);

1
9

Слайд 11

Глубокое клонирование объектов Простого клонирования может быть недостаточно, если объект содержит

Глубокое клонирование объектов

Простого клонирования может быть недостаточно, если объект содержит ссылки

на агрегированные объекты
В этом случае после процедуры простого клонирования необходимо создать и их копии тоже

public Object clone() {
Object result = null;
try {
result = (...) super.clone();
result.a = (...) a.clone();
...
} catch (CloneNotSupportedException ex) { }
return result;
}

Слайд 12

Равенство объектов Простого сравнения ссылок недостаточно для сравнения содержимого объектов Для

Равенство объектов

Простого сравнения ссылок недостаточно для сравнения содержимого объектов
Для сравнения объектов

по их содержимому применяется метод equals(Object obj)
В классе Object метод реализован таким образом, что возвращает true только при сравнении с самим объектом
Конкретный класс может переопределять метод equals(Object obj)
Слайд 13

Равенство объектов Метод equals(...) должен проверять эквивалентность объектов с точки зрения

Равенство объектов

Метод equals(...) должен проверять эквивалентность объектов с точки зрения бизнес-логики
Отношение,

задаваемое на множестве объектов этим методом, должно обладать следующими свойствами:
рефлективность (x.equals(x))
симметричность (x.equals(y) и y.equals(x))
транзитивность (x, y, z)
непротиворечивость (многократное x.equals(y))
сравнение с null (false)
Слайд 14

Равенство объектов public class Gadget implements Item { private int p1;

Равенство объектов

public class Gadget implements Item {
private int p1;
private

double p2;
...
public boolean equals(Object object) {
if (object == this) {
return true;
}
if (!(object instanceof Gadget)) {
return false;
}
Gadget gdgt = (Gadget) object;
return (this.p1 == gdgt.p1) && (this.p2 == gdgt.p2);
}
}
Слайд 15

Хэш-код объекта Метод int hashCode() предназначен для получения хэш-кода – числа,

Хэш-код объекта

Метод int hashCode() предназначен для получения хэш-кода – числа, используемого

для быстрого сравнения объектов
Если объект не изменял свое состояние, то значение хэш-кода не должно изменяться
Если два объекта эквивалентны (с точки зрения метода equals()), то хэш-коды объектов должны быть одинаковыми
Если хэш-коды объектов одинаковы, то это еще не значит, что объекты эквивалентны
Изменение реализации в классе метода equals() влечет за собой изменение реализации метода hashCode()
Слайд 16

Хэш-код объекта public class Employee { int employeeId; String name; Department

Хэш-код объекта

public class Employee {
int employeeId;
String name;
Department dept;
//some

other methods
public int hashCode() {
int hash = 42;
hash = hash * 17 + employeeId;
hash = hash * 31 + name.hashCode();
hash = hash * 13 + (dept == null ? 0 : dept.hashCode());
return hash;
}
}
Слайд 17

Классы-обертки примитивных типов Значения примитивных типов не могут быть непосредственно использованы

Классы-обертки примитивных типов

Значения примитивных типов не могут быть непосредственно использованы в

контексте, где требуется ссылка
Ссылочное представление значений примитивных типов является основной задачей т.н. классов-оберток
Экземпляр такого класса хранит внутри значение примитивного типа и предоставляет доступ к этому значению
Слайд 18

Классы-обертки примитивных типов Boolean Byte Character Double Float Integer Long Number Short Void

Классы-обертки примитивных типов

Boolean
Byte
Character
Double
Float

Integer
Long
Number
Short
Void

Слайд 19

Задачи классов-оберток примитивных типов Ссылочное представление значений примитивных типов Хранение вспомогательных

Задачи классов-оберток примитивных типов

Ссылочное представление значений примитивных типов
Хранение вспомогательных функций для

работы со значениями примитивных типов
Представление примитивных типов и их значений в механизмах рефлексии
Слайд 20

Наполнение классов-оберток Константы типов Integer.MAX_VALUE, Double.NaN Конструкторы: по значению и строке

Наполнение классов-оберток

Константы типов Integer.MAX_VALUE, Double.NaN
Конструкторы: по значению и строке Float(float value), Float(String s)
Методы

получения значения aBoolean.booleanValue(), aFloat.floatValue()
Методы преобразования в значение примитивного типа Integer.parseInt(String s), aFloat.byteValue()()
Методы преобразования в объект класса-обертки Integer.valueOf(String s, int radix)
Методы проверки состояния и вида значения aWrapedValue.compareTo(...), aDouble.isInfinite()
Специальные методы, обусловленные спецификой типа Double.longBitsToDouble(...), Integer.toHexString()
Слайд 21

Классы-обертки примитивных типов Каждому примитивному типу сопоставлен соответствующий класс-обертка Все классы-обертки

Классы-обертки примитивных типов

Каждому примитивному типу сопоставлен соответствующий класс-обертка
Все классы-обертки имеют публичный

конструктор (кроме класса Void)
Объекты классов-оберток могут сравниваться между собой методом equals()
Значения примитивных типов можно получить из объектов вызовом методов Value()
Классы-обертки предоставляют статические методы работы с примитивными типами
Слайд 22

Класс Math Предназначен для выполнения простых математических операций Не имеет явного

Класс Math

Предназначен для выполнения простых математических операций
Не имеет явного конструктора
Является final-классом
Все

методы являются статическими
Не гарантирует повторяемости результатов на различных платформах (в отличие от класса StrictMath)
Слайд 23

Наполнение класса Math Константы E и PI Функции взятия модуля abs()

Наполнение класса Math

Константы E и PI
Функции взятия модуля abs()
Функции максимума и

минимума max(), min()
Функции округления round(), rint()
Функции ближайшего целого ceil(), floor()
Тригонометрические функции sin(), cos(), tan(), asin(), acos(), atan()
Функции перевода toDegrees(), toRadians(), atan2()
Функции степени pow(), exp(), log(), sqrt()
Случайное значение random() (см. класс java.util.Random)
Слайд 24

Хранение строк byte [] Массив байт кодов char [] Массив Unicode-символов

Хранение строк

byte [] Массив байт кодов
char [] Массив Unicode-символов
String
Неизменяемая строка
StringBuffer Изменяемая строка

Слайд 25

Работа со строками. Класс String Значение объекта класса String не может

Работа со строками. Класс String

Значение объекта класса String не может быть изменено

без порождения нового объекта
Реализует операции для строки в целом
Экземпляры этого класса можно создавать без ключевого слова new
Каждый строковый литерал порождает экземпляр String
Значение любого типа может быть приведено к строке
Слайд 26

Наполнение класса String Строковое представление valueOf(), copyValueOf() Преобразование типов getBytes(), getChars(…),

Наполнение класса String

Строковое представление valueOf(), copyValueOf()
Преобразование типов getBytes(), getChars(…), toCharArray(), toString()
Сравнение compareTo(…), compareToIgnoreCase(…), contentEquals(…),

equals(…), equalsIgnoreCase(…), intern()
Выделение элементов charAt(…), substring(…), split(…)
Операции над всей строкой concat(…), replace(…), replaceAll(…), replaceFirst(…), toLowerCase(), toUpperCase(), trim()
Проверка содержимого строки endsWith(…), indexOf(…), lastIndexOf(…), length(), matches(…), regionMatches(…), startsWith(…)
Слайд 27

Работа со строками. Класс StringBuffer Реализует методы модификации строки без порождения

Работа со строками. Класс StringBuffer

Реализует методы модификации строки без порождения нового объекта
Реализует

операции с элементами строки по отдельности
Используется по умолчанию при конкатенации строк
Для хранения строк использует буфер переменного объема
Слайд 28

Наполнение класса StringBuffer Добавление фрагментов append(…), insert(…) Поиск вхождений indexOf(…), lastIndexOf(…)

Наполнение класса StringBuffer

Добавление фрагментов append(…), insert(…)
Поиск вхождений indexOf(…), lastIndexOf(…)
Извлечение фрагментов charAt(…), getChars(…), reverse(), substring(…)
Модификация

строки delete(…), deleteCharAt(…), replace(…), setCharAt(…), setLength(…)
Состояние буфера length(), capacity(), ensureCapacity(…), trimToSize()
Слайд 29

Конкатенация строк System.out.println("a = " + a + ";"); System.out.println( (new

Конкатенация строк

System.out.println("a = " + a + ";");

System.out.println(
(new StringBuffer("a =

"))
.append(a)
.append(";")
.toString()
);

Не стоит злоупотреблять автоматической конкатенацией
Особенно если для вас критична память и скорость выполнения программы

Слайд 30

Системные классы ClassLoader – абстрактный класс, необходим для загрузки описания типов

Системные классы

ClassLoader – абстрактный класс, необходим для загрузки описания типов (объектов

Class) в память JVM
SecurityManager – реализует методы проверки допустимости запрашиваемой операции
System – содержит набор полезных статических полей и методов
Runtime – позволяет приложению взаимодействовать со средой исполнения
Process – представляет интерфейс взаимодействия с внешней программой, запущенной через Runtime
Слайд 31

Пакет java.util Классы для работы со временем Классы для работы с

Пакет java.util

Классы для работы со временем
Классы для работы с локализацией
Классы для

работы с массивами
Классы и интерфейсы коллекций
Прочие вспомогательные классы и интерфейсы
Слайд 32

Классы работы со временем Date Отражает дату и время с точностью

Классы работы со временем

Date Отражает дату и время с точностью до миллисекунд.

Не рекомендуется к использованию
Calendar и сопутствующие Содержит константы и методы для работы с датой и временем с учетом особенностей локализации
Timer Позволяет создавать задания для более позднего запуска (с использованием потоков инструкций)
Слайд 33

Методы класса Calendar Установка значения поля календаря public void set(int field,

Методы класса Calendar

Установка значения поля календаря public void set(int field, int value)
Добавляет

смещение к текущей величине поля
public abstract void add(int field, int amount)
Добавляет смещение к величине поля, причем не производит изменения старших полей
public abstract void roll(int field, boolean up)
Слайд 34

Методы класса Calendar SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMMM dd HH:mm:ss");

Методы класса Calendar

SimpleDateFormat sdf = new SimpleDateFormat("yyyy MMMM dd HH:mm:ss");
Calendar cal

= Calendar.getInstance();
cal.set(Calendar.YEAR, 2012);
cal.set(Calendar.MONTH, Calendar.AUGUST);
cal.set(Calendar.DAY_OF_MONTH, 31);
System.out.println("Initialy set date :" + sdf.format(cal.getTime()));
cal.add(Calendar.MONTH, 1);
System.out.println("Month changed by add():" + sdf.format(cal.getTime()));
cal.roll(Calendar.DATE, 45);
System.out.println("Date changed by roll():" + sdf.format(cal.getTime()));

Initialy set date:2012 Август 31 15:05:09
Month changed by add():2012 Сентябрь 30 15:05:09
Date changed by roll():2012 Сентябрь 15 15:05:09

Слайд 35

Классы для работы с локализацией Locale Содержит константы и методы для

Классы для работы с локализацией

Locale Содержит константы и методы для работы с

языками и особенностями регионов
TimeZone Содержит методы для работы с часовыми поясами
SimpleTimeZone Реализует TimeZone для Григорианского календаря
Слайд 36

java.util.Random Экземпляр класса является отдельным генератором псевдослучайных чисел (ГПСЧ) Различные ГПСЧ

java.util.Random

Экземпляр класса является отдельным генератором псевдослучайных чисел (ГПСЧ)
Различные ГПСЧ позволяют формировать

некоррелированные последовательности
«Основание» имеет размерность 48bit
Методы получения ПСЧ: nextBoolean(), nextByte(), nextDouble(), nextFloat(), nextInt(), nextLong(), nextGaussian()
Метод настройки setSeed(long seed)
Слайд 37

Регулярные выражения Позволяют сопоставлять текст с шаблоном, выполнять замену текста Операции

Регулярные выражения

Позволяют сопоставлять текст с шаблоном, выполнять замену текста
Операции осуществляются с

помощью универсальных символов, которые специальным образом интерпретируются
Используются в большом количестве языков программирования
Слайд 38

Пакет java.util.regex Класс Pattern Реализует шаблоны регулярных выражений. Позволяет составлять сложные

Пакет java.util.regex

Класс Pattern
Реализует шаблоны регулярных выражений. Позволяет составлять сложные шаблоны и

разделять строки на элементы
Класс Matcher
Реализует поиск элементов, соответствующих шаблону, в строках и проверку строк на соответствие шаблону
PatternSyntaxException
указывает на синтаксическую ошибку в выражении
Слайд 39

Коллекции Коллекции (контейнеры) – хранилища, поддерживающие разнообразные способы накопления и упорядочивания

Коллекции

Коллекции (контейнеры) – хранилища, поддерживающие разнообразные способы накопления и упорядочивания объектов

с целью обеспечения возможностей эффективного доступа к ним
В Java коллекции разделены на интерфейсы, абстрагирующие общие принципы работы с коллекциями, и классы, реализующие конкретную функциональность
Не все методы, заявленные в интерфейсах, должны в действительности реализовываться классами. Часть методов может просто выбрасывать исключение UnsupportedOperationException
Слайд 40

Интерфейс Collection Образующий в иерархии типов коллекций Определяет базовую функциональность любой

Интерфейс Collection

Образующий в иерархии типов коллекций
Определяет базовую функциональность любой коллекции
Подразумевает добавление,

удаление, выбор элементов в коллекции
Допускает дубликаты и пустые элементы
Абстрактный класс AbstractCollection определяет реализацию ряда методов
Слайд 41

Методы интерфейса Collection Добавление элементов boolean add(Object o), boolean addAll(Collection c)

Методы интерфейса Collection

Добавление элементов boolean add(Object o), boolean addAll(Collection c)
Исключение элементов boolean

remove(Object o), boolean removeAll(Collection c), boolean retainAll(Collection c), void clear()
Состояние коллекции boolean contains(Object o), boolean containsAll(Collection c), boolean isEmpty(), int size()
Вспомогательные методы Object[] toArray(), Iterator iterator()
Слайд 42

Интерфейс Set Расширяет интерфейс Collection Не допускает наличие дубликатов Разрешает только

Интерфейс Set

Расширяет интерфейс Collection
Не допускает наличие дубликатов
Разрешает только одну ссылки null
Объекты

коллекции должны корректно реализовывать метод equals()
Расширение SortedSet требует упорядоченности по значениям набора
Абстрактный класс AbstractSet определяет реализацию ряда методов
Слайд 43

Интерфейс List Расширяет интерфейс Collection Подразумевает хранение упорядоченной последовательности объектов Порядок

Интерфейс List

Расширяет интерфейс Collection
Подразумевает хранение упорядоченной последовательности объектов
Порядок хранения определяется порядком

добавления элементов
Позволяет обращаться к элементам по их номеру в коллекции
Абстрактный класс AbstractList определяет реализацию ряда методов
Слайд 44

Специальные методы интерфейса List Адресное добавление void add(int index, Object o),

Специальные методы интерфейса List

Адресное добавление void add(int index, Object o), boolean

addAll(int index, Collection c)
Адресные операции с элементами Object get(int index), Object set(int index, Object o), Object remove(int index)
Операции поиска int indexOf(Object o), int lastIndexOf(Object o)
Специальные операции List subList(int from, int to), ListIterator listIterator()
Слайд 45

Интерфейс Iterator Позволяет работать с любой коллекцией как с перебираемым набором

Интерфейс Iterator

Позволяет работать с любой коллекцией как с перебираемым набором элементов
Метод

Iteraror iterator() вызывается для объекта коллекции
Проверка наличия следующего объекта коллекции boolean hasNext()
Следующий объект Object next()
Исключение объекта void remove()
Слайд 46

Интерфейс Map Не расширяет интерфейс Collection Подразумевает хранение набора объектов парами

Интерфейс Map

Не расширяет интерфейс Collection
Подразумевает хранение набора объектов парами ключ/значение
Ключи должны

быть уникальными
Порядок следования пар не определен
Расширение SortedMap требует упорядоченности по значениям ключей
Абстрактный класс AbstractMap определяет реализацию ряда методов
Слайд 47

Методы интерфейса Map Добавление объектов Object put(Object key, Object value), void

Методы интерфейса Map

Добавление объектов Object put(Object key, Object value), void putAll(Map t)
Исключение

объектов Object remove(Object key), void clear()
Доступ к объекту по ключу Object get(Object key)
Состояние boolean containsValue(Object value), boolean containsKey(Object key), int size(), boolean isEmpty()
Преобразование типа Set entrySet(), Set keySet(), Collection values()
Слайд 48

Иерархия интерфейсов коллекций

Иерархия интерфейсов коллекций

Слайд 49

Иерархия абстрактных классов коллекций

Иерархия абстрактных классов коллекций

Слайд 50

Классы коллекций Динамические массивы ArrayList (List), Vector (List) Двухсвязный список LinkedList

Классы коллекций

Динамические массивы ArrayList (List), Vector (List)
Двухсвязный список LinkedList (List)
Упорядоченные множество и карта

TreeSet (Set), TreeMap (SortedMap)
Ряд других классов HashMap (Map), HashSet (Set), …
Слайд 51

Класс java.util.ArrayList Расширяет класс AbstractList Динамически расширяется при добавлении новых элементов

Класс java.util.ArrayList

Расширяет класс AbstractList
Динамически расширяется при добавлении новых элементов в

коллекцию
Методы доступа к элементам не синхронизированы
Рекомендуется для использования при работе с коллекцией из одной нити
Слайд 52

Класс java.util.ArrayList ArrayList arrayList = new ArrayList(); for (int i =

Класс java.util.ArrayList

ArrayList arrayList = new ArrayList();
for (int i = 0; i

< 5; i++) {
arrayList.add("Item " + i);
System.out.println(arrayList.get(i));
}
System.out.println("---");
arrayList.add(2, "Item to insert");
Iterator it = arrayList.iterator();
while (it.hasNext()) {
System.out.println((String) it.next());
}

Item 0
Item 1
Item 2
Item 3
Item 4
---
Item 0
Item 1
Item 2
Item to insert
Item 3
Item 4

Слайд 53

Класс java.util.LinkedList Реализует интерфейс List Является реализацией двусвязного списка Добавлены дополнительные

Класс java.util.LinkedList

Реализует интерфейс List
Является реализацией двусвязного списка
Добавлены дополнительные методы доступа,

добавления и удаления элементов в начало и конец списка
Удобен для организации стека
Слайд 54

Класс java.util.LinkedList LinkedList linkedList = new LinkedList(); linkedList.add("Item 1"); linkedList.add("Item 2");

Класс java.util.LinkedList

LinkedList linkedList = new LinkedList();
linkedList.add("Item 1");
linkedList.add("Item 2");
linkedList.addFirst("Item 3");
linkedList.addLast("Item 4");
printCurrentCollection(linkedList);
linkedList.remove(1);
printCurrentCollection(linkedList);
linkedList.remove(linkedList.getLast());
printCurrentCollection(linkedList);

Item

3
Item 1
Item 2
Item 4
---
Item 3
Item 2
Item 4
---
Item 3
Item 2
Слайд 55

Класс java.util.Hashtable Реализует интерфейс Map и расширяет устаревший класс Dictionary Хранит

Класс java.util.Hashtable

Реализует интерфейс Map
и расширяет устаревший класс Dictionary
Хранит объекты в виде

пар ключ/значение
Не позволяет null в ключах и значениях
Использует алгоритм хэширования для увеличения скорости доступа к данным
Число key.hashCode() % array.length используется для определения индекса элемента
Синхронизированный доступ
Слайд 56

Класс java.util.HashMap Расширяет класс AbstractMap Похож на класс Hashtable Хранит объекты

Класс java.util.HashMap

Расширяет класс AbstractMap
Похож на класс Hashtable
Хранит объекты в виде пар

ключ/значение
Для одного ключа и элементов допускаются значения типа null
Порядок хранения элементов не совпадает с порядком их добавления и может меняться
Обеспечивает постоянное время доступа для операций get() и put()
Слайд 57

Класс java.util.HashMap HashMap hashmap = new HashMap(); for (int i =

Класс java.util.HashMap

HashMap hashmap = new HashMap();
for (int i = 0; i

< 10; i++) {
hashmap.put("Key" + i, new Integer(i));
}
System.out.println("Key1: " +
(Integer) hashmap.get("Key1"));
System.out.println("---");
Map.Entry m = null;
Iterator iterator = hashmap.entrySet().iterator();
while (iterator.hasNext()) {
m = (Map.Entry) iterator.next();
System.out.println(m.getKey() + ": " + (Integer) m.getValue());
}
Key1: 1
---
Key0: 0
Key2: 2
Key1: 1
Key4: 4
Key3: 3
Key6: 6
Key5: 5
Key8: 8
Key7: 7
Key9: 9
Слайд 58

Класс java.util.TreeMap реализует SortedMap расширяет AbstractMap содержит ключи в порядке возрастания

Класс java.util.TreeMap

реализует SortedMap
расширяет AbstractMap
содержит ключи в порядке возрастания
запрещено применение null для

ключей
при использовании дубликатов ключей ссылка на предыдущий объект теряется

TreeMap tm = new TreeMap();
tm.put("key", "String1");
tm.put("key", "String2"); // изменение ссылки по ключу key

Слайд 59

Класс Collections Утилитный класс Содержит ряд статических методов прикладного назначения, позволяющих

Класс Collections

Утилитный класс
Содержит ряд статических методов прикладного назначения, позволяющих оперировать объектами

коллекций
Группы методов:
Создание и поддержка оберток коллекций
Прочие прикладные методы
Слайд 60

Обертки коллекций Синхронизированные Обеспечивают механизмы синхронизации доступа для многопоточных приложений List

Обертки коллекций

Синхронизированные
Обеспечивают механизмы синхронизации доступа для многопоточных приложений
List synchronizedList(List l), …
Неизменяемые
Запрещают

использование методов модификации значений
Map unmodifiableMap(Map m), …
Слайд 61

Прикладные методы Методы поиска минимума и максимума min(), max() Работа со

Прикладные методы

Методы поиска минимума и максимума min(), max()
Работа со списками reverse(), shuffle(), fill(),

copy(), nCopies()
Сортировка списков sort()
Поиск элементов в списке binarySearch()
Прочие прикладные методы
Слайд 62

java.util.Arrays Содержит статические методы для работы с массивами Представление массива списком

java.util.Arrays

Содержит статические методы для работы с массивами
Представление массива списком List asList(Object[] a)
Поиск

элемента в массиве int binarySearch(…[] a, … key)
Сравнение массивов по элементам boolean equals(…[] a1, …[] a2)
Заполнение массива элементами fill(…[] a, int from, int to, … val)
Сортировка массива sort(…[] a, int from, int to)
Слайд 63

Спасибо за внимание!

Спасибо за внимание!