Java_Lecture6.ppt
- Количество слайдов: 88
Библиотека классов Java Классы оболочки Для чего необходимы оболочки: 1. Использование в методах, сигнатура которых требует объекта 2. Использование специальных констант, имеющихся в классахоболочках (MIN_VALUE, MAX_VALUE) 3. Использование специальных методов преобразования типов (например, преобразование в строки и из строк) 1
Библиотека классов Java Классы оболочки Переход от простого типа к классу-оболочке (boxing) и обратный переход (unboxing) часто выполняется компилятором автоматически Integer x, y; x = 12; y = 15; System. out. println(x+y); boxing x = new Integer(12); y = new Integer(15); System. out. println( unboxing x. int. Value()+y. int. Value()); 2
Библиотека классов Java Классы оболочки byte. Value() short. Value() int. Value() long. Value() float. Value() double. Value() int compare. To(Byte another. Byte) int compare. To(Double another. Double) int compare. To(Float another. Float) int compare. To(Integer another. Integer) int compare. To(Long another. Long) int compare. To(Short another. Short) 3
Библиотека классов Java Классы оболочки Метод Описание static Integer decode(String s) String –> Integer (может принимать строковое представление в 10 -й, 8 -й, 16 -й системах счисления) static int parse. Int(String s) String -> int (только десятичный) static int parse. Int(String s, int radix) String -> int (radix = 2, 8, 10, 16) String to. String() Integer -> String static String to. String(int i) int -> String static Integer value. Of(int i) int -> Integer static Integer value. Of(String s) String -> Integer static Integer value. Of(String s, int radix) String -> Integer (radix = 2, 8, 10, 16) 4
Библиотека классов Java Класс Math содержит 2 статические константы: Math. E, Math. PI и статические методы для выполнения математических функций (sin, cos, max, min, ceil, floor, exp, log, pow и др. ) double x = 11. 635; System. out. println("The value of e is” + Math. E); System. out. println("exp” + x + “is” + Math. exp(x)); System. out. println("log” + x + “is” + Math. log(x)); 5
Библиотека классов Java Класс Math При необходимости можно импортировать статические константы и методы с помощью директивы import static java. lang. Math. *; double x = 11. 635; System. out. println("The value of e is” + E); System. out. println("exp” + x + “is” + exp(x)); System. out. println("log” + x + “is” + log(x)); 6
Библиотека классов Java Класс Random import java. util. *; … Random r = new Random(); int i = r. next. Int(100); 7
Библиотека классов Java Класс String Два способа создания объекта String: 1) String greeting = "Hello world!"; 2) char[ ] hello. Array = { ‘H’, ‘e’, ‘l’, ‘o’, ‘w’, ‘o’, ‘r’, ‘l’, ‘d’, ’!’ }; String greeting = new String(hello. Array); System. out. println(greeting); Внимание! Класс String работает с неизменяемыми строками 8
Библиотека классов Java Класс String Конструкторы класса String() String(String source) String(String. Buffer buffer) String(char. Array[ ], int offset, int count) String(byte. Array[ ], String enc) String(byte. Array[ ], int offset, int count, String enc) 9
Библиотека классов Java Класс String Длина строки: String s = "Dot saw I was Tod"; int len = s. length(); Конкатенация: String s 3 = s 1 + s 2; String s 3 = s 1. concat(s 2); “ 2” + 2 = 222 2 + “ 2” = 42 “ 2” + (2 + 2) = 24 10
Библиотека классов Java Класс String Форматированный вывод: public Print. Stream format(String format, Object. . . args) public Print. Stream format(Locale l, String format, Object. . . args) public Print. Stream printf(String format, Object. . . args) public Print. Stream printf(Locale l, String format, Object. . . args) System. out. format("The value of the float variable is %f, while the value of the " + “integer variable is %d, and the string is %s", float. Var, int. Var, string. Var); 11
Библиотека классов Java Класс String Метод Описание char. At(int index) Возвращает символ строки с индексом index. void get. Chars(int src. Begin, Включает в массив символов dest[ ], начиная с int src. End, char[ ] dest, int индекса dst. Begin, часть строки от индекса src. Begin dest. Begin) вкл. до индекса src. End искл. byte[ ] get. Bytes() Содержимое строки записывается в массив байтов. char[ ] to. Char. Array() Преобразует строку в массив символов типа char. boolean equals (Object obj) boolean equals. Ignore. Case (String s) Возвращают true, если аргумент obj не равен null, является объектом класса String, и строка, содержащаяся в нем, полностью идентична данной строке с учетом (без учета) регистра символов. 12
Библиотека классов Java Класс String Метод Описание int compare. To (String str) int compare. To. Ignore. Case (String str) Возвращают целое число типа int, вычисленное по следующим правилам: 1. Сравниваются символы данной строки и строки str с одинаковыми индексами, пока не встретятся различные символы (с учетом регистра) или одна из строк не закончится. 2. Пусть разные символы встретились в позиции k. Тогда метод возвращает значение this. char. At(k)-str. char. At(k) 3. Пусть символы в строках были одинаковыми, пока не за-кончилась одна из строк. Тогда метод вернет значение: this. length()-str. length() 4. Если строки совпадают, метод вернет 0. 13
Библиотека классов Java Класс String Метод Описание boolean region. Matches (int Сравнивает подстроку данной строки с toffset, String other, int ooffset, подстрокой той же длины len строки, заданной int len) аргументом str. Сравнение начинается с позиции toffset данной строки и c позиции ooffset строки, заданной аргументом str. Метод возвращает false, если в сравниваемых участках строк встретилась хотя бы одна пара несовпадающих (с учетом регистра) символов. boolean starts. With (String str) boolean starts. With (String str, int toffset) Возвращает true, если данная строка начинается с подстроки str (начиная с позиции toffset) boolean ends. With (String suffix) Возвращает true, если данная строка заканчивается подстрокой str 14
Библиотека классов Java Класс String Метод Описание String substring (int begin. Index, int end. Index) Возвращает подстроку данной строки, начиная с индекса begin. Index до индекса end. Index. String replace (char old. Char, char new. Char) Заменяет в данной строке все вхождения символа old. Char символом new. Char String to. Upper. Case() Преобразует все символы строки к верхнему регистру. String to. Lower. Case() Преобразует все символы строки к нижнему регистру. String trim() Удаляет пробельные символы в начале и конце строки static String value. Of (<type> b) Преобразует аргумент в его строковое представление. 15
Библиотека классов Java Класс String. Buffer – это строковый буфер переменной длины. Создать объект класса String. Buffer можно только с помощью конструкторов: String. Buffer() - пустой строковый буфер с емкостью 16 символов. String. Buffer(int length) - пустой строковой буфер с емкостью length String. Buffer(String str) - строковый буфер емкостью str. length()+16, содержащий строку str. Если строковый буфер начинает переполняться, его емкость автоматически увеличивается. 16
Библиотека классов Java Класс String. Buffer Увеличение емкости буфера: ensure. Capacity(int min. Capacity) Установка емкости буфера: set. Length(int new. Length) Длина строки в буфере: length() Емкость буфера: capacity() 17
Библиотека классов Java Класс String. Buffer Метод Описание append (<type> elem) Добавление аргумента к буферу append (String str) Добавление строки к буферу append (Object obj) Добавление объекта к буферу (выполняется метод to. String() ) insert (int ind, <type> elem) Вставка элемента в буфер в позицию ind insert (int ind, String str) Вставка строки в буфер в позицию ind insert (int ind, Object obj) Вставка объекта в буфер в позицию ind 18
Библиотека классов Java Класс String. Buffer Метод Описание delete(int begin, int end) Удаление подстроки delete. Char. At(int ind) Удаление символа replace(int begin, int end, String str) Замена подстроки reverse() Обращение строки 19
Библиотека классов Java Класс String. Tokenizer Выполняет синтаксический разбор (парсинг) строки. Конструкторы: String. Tokenizer(String str) String. Tokenizer(String str, String delim) Методы: String next. Token() boolean has. More. Tokens() int count. Tokens() 20
Библиотека классов Java Класс String. Tokenizer String s = “Строка, предназначенная для разбора”; String. Tokenizer st = new String. Tokenizer(s, ” tnr, . ”); while (st. has. More. Tokens()) { System. out. println(st. next. Token()); } 21
Библиотека классов Java Класс Runtime инкапсулирует JVM. Метод Описание static Runtime get. Runtime() получить ссылку на текущий Runtimeобъект Process exec(String progname) Выполняет программу progname как отдельный процесс. Возвращает объект типа Process. void exit(int exit. Code) Останавливает выполнение JVM. Возвращает код завершения родительскому процессу (0 – нормальное завершение). long free. Memory() Возвращает приблизительное количество свободной памяти (в байтах), доступное JVM. 22
Библиотека классов Java Класс Runtime Метод Описание void load. Library (String libname) Загружает динамическую библиотеку libname void gc() Инициализирует процесс сборки мусора long total. Memory() Возвращает общее количество памяти (в байтах), доступное JVM. 23
Библиотека классов Java Класс Runtime class Memory. Demo {public static void main(String args[ ]) {Runtime r = Runtime. get. Runtime(); long mem 1, mem 2; System. out. println(“Полный объем памяти: “ + r. total. Memory()); System. out. println(“Свободная память: “ + r. free. Memory()); { Integer massiv[ ] = new Integer[1000]; System. out. println(“Свободная память: “ + r. free. Memory()); } r. gc(); System. out. println(“Свободная память после gc: ” + r. free. Memory()); 24
Библиотека классов Java Класс Process инкапсулирует процесс. void destroy() Завершает процесс. int wait. For() Приостанавливает выполнение текущего потока до завершения вызывающего процесса 25
Библиотека классов Java Класс Process class Exec. Demo {public static void main(String args[ ]) {Runtime r = Runtime. get. Runtime(); Process p = null; try {p = r. ехес("notepad"); p. wait. For () ; } catch (Exception e) {System. out. println("Ошибка выполнения notepad. "); } System. out. println("Notepad завершился " + p. exit. Value()); } } 26
Библиотека классов Java Класс System выполняет функции, аналогичные классу Runtime, т. е. взаимодействие с системой в ходе выполнения программы. В этом классе продублировано большинство методов класса Runtime (load. Library(), exit(), gc()) но, в отличие от Runtime, в классе System эти методы являются статическими. 27
Библиотека классов Java Класс System Для любой среды Java 2 доступны переменные среды, приведенные в табл. Часть из этих переменных в целях безопасности доступны только для приложений (не для апплетов). Чтобы получать значения переменных среды либо изменять их, в классе System существуют методы String get. Property(String variable) String set. Property(String variable, String value) 28
Библиотека классов Java Класс System 29
Библиотека классов Java Класс System //отображаем путь к текущему каталогу пользователя System. out. println(System. get. Property(“user. dir”)); //устанавливаем текущим каталогом пользователя c: java System. set. Property(“user. dir”, ”c: java”); 30
Параметризация типов в Java Непараметризованный класс: public class Box { private Object object; public void add(Object object) { this. object = object; } public Object get() { return object; } } 31
Параметризация типов в Java Ошибка, связанная с отсутствием параметризации: public class Box. Demo {public static void main(String[ ] args) { Box integer. Box = new Box(); … integer. Box. add("10"); . . . Integer some. Integer = (Integer)integer. Box. get(); System. out. println(some. Integer); } } 32
Параметризация типов в Java Exception in thread "main" java. lang. Class. Cast. Exception: java. lang. String cannot be cast to java. lang. Integer at Box. Demo. main(Box. Demo. java: 6) 33
Параметризация типов в Java Параметризованный класс (generic type): public class Box<T> { private T t; // T stands for "Type" public void add(T t) { this. t = t; } public T get() { return t; } } <T> - type variable, formal type parameter 34
Параметризация типов в Java Создание объекта параметризованного класса (generic type invocation): Box<Integer> integer. Box = new Box<Integer>(); public class Box. Demo {public static void main(String[ ] args) { Box<Integer> integer. Box = new Box<Integer>(); integer. Box. add(new Integer(10)); Integer some. Integer = integer. Box. get(); //no cast! integer. Box. add("10"); } } 35
Параметризация типов в Java Box. Demo 3. java: 5: add(java. lang. Integer) in Box<java. lang. Integer> cannot be applied to (java. lang. String) integer. Box. add("10"); ^ 1 error Таким образом вместо исключения (runtime error) получаем compilation error !!! 36
Параметризация типов в Java Параметризованный класс может иметь несколько параметров, но они должны обозначаться разными буквами. class Box <T, T> - error! class Box <T, U> - ok! 37
Параметризация типов в Java Параметризованные методы public class Box<T> { private T t; public void add(T t) { this. t = t; } public T get() { return t; } public <U> void inspect(U u) {System. out. println("T: " + t. get. Class(). get. Name()); System. out. println("U: " + u. get. Class(). get. Name()); } } 38
Параметризация типов в Java Параметризованные методы public static void main(String[ ] args) { Box<Integer> integer. Box = new Box<Integer>(); integer. Box. add(new Integer(10)); integer. Box. inspect("some text"); } Вывод: T: java. lang. Integer U: java. lang. String 39
Параметризация типов в Java Ограниченная параметризация (bounded type parameters) public <U extends Number> void inspect(U u) {System. out. println("T: " + t. get. Class(). get. Name()); System. out. println("U: " + u. get. Class(). get. Name()); } public static void main(String[ ] args) { Box<Integer> integer. Box = new Box<Integer>(); integer. Box. add(new Integer(10)); integer. Box. inspect("some text"); //error!!! } 40
Параметризация типов в Java Ограниченная параметризация (bounded type parameters) Extends в данном случае понимается и как extends и как implements: public <U extends Number & My. Interface> void inspect(U u) {System. out. println("T: " + t. get. Class(). get. Name()); System. out. println("U: " + u. get. Class(). get. Name()); } 41
Параметризация типов в Java Подтипизация Box<Number> box = new Box<Number>(); box. add(new Integer(10)); // OK box. add(new Double(10. 1)); // OK … public void box. Test (Box<Number> n) { … } 42
Параметризация типов в Java Подтипизация Box<Integer> Integer. Box = new Box<Integer>(); Box<Double> Double. Box = new Box<Double>(); box. Test(Integer. Box ); //error! box. Test(Double. Box ); //error! Причина ошибки - Box<Integer> и Box<Double> не являются подтипами Box<Number> !!! 43
Параметризация типов в Java Wildcards Box<? extends Number> some. Box =. . . ; //upper bound Box<? super Number> some. Box =. . . ; //lower bound Box<? > some. Box =. . . ; //unbounded wildcard Box<? extends Object> some. Box =. . . ; //unbounded wildcard Box<Integer> и Box<Double> не являются подтипами Box<Number>, но являются подтипами Box<? extends Number> 44
Параметризация типов в Java Wildcards Box<? extends Number> some. Box = new Box<Number>(); Box<Integer> Integer. Box = new Box<Integer>(); Box<Double> Double. Box = new Box<Double>(); some. Box = Integer. Box; some. Box = Double. Box; 45
Параметризация типов в Java Wildcards public void box. Test (Box<? extends Number> n) { … } Box<Integer> Integer. Box = new Box<Integer>(); Box<Double> Double. Box = new Box<Double>(); box. Test(Integer. Box ); //ok! box. Test(Double. Box ); //ok! 46
Параметризация типов в Java Очистка типа (Type erasure) На этапе компиляции вся информация о параметризованных типах удаляется. Это позволяет сохранить совместимость на уровне байт-кода с обычными типами. Следствие: нельзя получить информацию о параметризованном типе во время выполнения. 47
Параметризация типов в Java Очистка типа (Type erasure) public class My. Class<E> { public void my. Method(Object item) { if (item instanceof E) //Compiler error { . . . } E item 2 = new E(); //Compiler error E[ ] i. Array = new E[10]; //Compiler error E obj = (E)new Object(); //Unchecked cast warning } } 48
Параметризация типов в Java Очистка типа (Type erasure) public class Warning. Demo { public static void main(String[ ] args) { Box<Integer> bi; bi = create. Box(); } static Box create. Box() { return new Box(); } } 49
Параметризация типов в Java Очистка типа (Type erasure) Warning. Demo. java: 4: warning: [unchecked] unchecked conversion found : Box required: Box<java. lang. Integer> bi = create. Box(); ^ 1 warning 50
Библиотека классов Java Коллекции. Структура коллекций Коллекция – это объект-контейнер, включающий группу, как правило, однотипных объектов. Структура коллекций (collections framework) Java стандартизирует способ, с помощью которого ваши программы хранят и обрабатывают группы объектов. Структура коллекций Интерфейсы Реализации Алгоритмы 51
Библиотека классов Java Коллекции. Структура коллекций Преимущества использования структуры коллекций: 1. Избавление от рутинных операций по кодированию стандартных структур данных и алгоритмов 2. Высокая эффективность реализации 3. Универсальность и простота изучения(различные типы коллекций работают похожим друг на друга образом и с высокой степенью способности к взаимодействию) 4. Расширяемость Структура коллекций находится в пакете java. util. * 52
Библиотека классов Java Коллекции. Интерфейсы Все коллекции в Java являются параметризованными public interface Collection<E>. . . 53
Библиотека классов Java Коллекции. Интерфейс Collection Корень иерархии. Задает самые общие методы для работы с коллекциями. public interface Collection<E> extends Iterable<E> { int size(); boolean is. Empty(); boolean contains(Object element); boolean add(E element); boolean remove(Object element); Iterator<E> iterator(); } 54
Библиотека классов Java Коллекции. Интерфейс Collection … boolean contains. All(Collection<? > c); boolean add. All(Collection<? extends E> c); boolean remove. All(Collection<? > c); boolean retain. All(Collection<? > c); void clear(); Object[ ] to. Array(); } 55
Библиотека классов Java Коллекции. Перемещение по коллекции 1. For-each for (Object o : collection) System. out. println(o); 2. public interface Iterator<E> { boolean has. Next(); E next(); void remove(); } 56
Библиотека классов Java Коллекции. Перемещение по коллекции Collection <String> cs = new Array. List<String>(); cs. add("1"); cs. add("2"); cs. add("3"); String str = new String(); for (str : cs) System. out. println(str); 57
Библиотека классов Java Коллекции. Перемещение по коллекции Collection <String> cs = new Array. List<String>(); cs. add("1"); cs. add("2"); cs. add("3"); Iterator it = cs. iterator(); while(it. has. Next()) System. out. println(it. next()); 58
Библиотека классов Java Коллекции. Перемещение по коллекции Метод remove() может быть вызван только один раз после вызова методы next(), иначе бросается исключение. Метод remove() единственный безопасный способ модификации коллекции. static void filter(Collection<? > c) { for (Iterator<? > it = c. iterator(); it. has. Next(); ) if (!cond(it. next())) it. remove(); } 59
Библиотека классов Java Коллекции. Интерфейс Set – коллекция без повторяющихся элементов (математическое множество). Методы совпадают с Collection но add() вернет false, если элемент уже есть в коллекции. 60
Библиотека классов Java Коллекции. Интерфейс Set import java. util. *; public class Find. Dups { public static void main(String[ ] args) { Set<String> s = new Hash. Set<String>(); for (String a : args) if (!s. add(a)) System. out. println("Duplicate detected: " + a); System. out. println(s. size() + " distinct words: " + s); } } 61
Библиотека классов Java Коллекции. Интерфейс Sorted. Set из пакета java. util, расширяющий интерфейс Set, описывает упорядоченное множество, отсортированное по естественному порядку возрастания его элементов или по порядку, заданному реализацией интерфейса Comparator. Элементы не нумеруются, но есть понятие первого, последнего, большего и меньшего элемента. 62
Библиотека классов Java Коллекции. Интерфейс Sorted. Set • Comparator() — возвращает способ упорядочения коллекции; • Object first () — возвращает первый, меньший элемент коллекции; • Sorted. Set head. Set (Object to. Element) — возвращает начальные, меньшие элементы до элемента to. Element исключительно; • Object last() — возвращает последний, больший элемент коллекции; 63
Библиотека классов Java Коллекции. Интерфейс Sorted. Set • Sorted. Set sub. Set(Object from. Element, Object to. Element) — возвращает подмножество коллекции от элемента from. Element включительно до элемента to. Element исключительно; • Sorted. Set tail. Set (Object from. Element) — возвращает последние, большие элементы коллекции от элемента from. Element включительно. 64
Библиотека классов Java Коллекции. Интерфейс List из пакета java. util, расширяющий интерфейс Collection, описывает методы работы с упорядоченными коллекциями. Иногда их называют последовательностями (sequence). Элементы такой коллекции пронумерованы, начиная от нуля, к ним можно обратиться по индексу. В отличие от коллекции Set элементы коллекции List могут повторяться. 65
Библиотека классов Java Коллекции. Интерфейс List • void add(int index. Object obj) — вставляет элемент obj в позицию index; старые элементы, начиная с позиции index, сдвигаются, их индексы увеличиваются на единицу; • boolean add. All(int index. Collection coll) — вставляет все элементы коллекции coll; • Object get(int index) -— возвращает элемент, находящийся в позиции index; • int index. Of (Object obj) — возвращает индекс первого появления элемента obj в коллекции; 66
Библиотека классов Java Коллекции. Интерфейс List • int last. Index. Of (Object obj) — возвращает индекс последнего появления элемента obj в коллекции; • List. Iterator list. Iterator() — возвращает итератор коллекции; • List. Iterator list. Iterator (int index) — возвращает итератор конца коллекции от позиции index; • Object set (int index, Object obj) — заменяет элемент, находящийся в позиции index, элементом obj; • List sub. List(int from, int to) — возвращает часть коллекции от позиции from включительно до позиции to исключительно. 67
Библиотека классов Java Коллекции. Интерфейс Map из пакета java. util описывает коллекцию, состоящую из пар "ключ — значение". У каждого ключа только одно значение, что соответствует математическому понятию однозначной функции или отображения. Такую коллекцию часто называют еще словарем (dictionary) или ассоциативным массивом (associative array). 68
Библиотека классов Java Коллекции. Интерфейс Map • boolean contains. Key (Object key) — Проверяет наличие ключа key; • boolean contains. Value (Object value) — Проверяет наличие значения value; • Set entry. Set() — представляет коллекцию в виде множества, каждый элемент которого — пара из данного отображения, с которой можно работать методами вложенного интерфейса Map. Entry; • Object get(Object key) -— возвращает значение, отвечающее ключу key; 69
Библиотека классов Java Коллекции. Интерфейс Map • Set key. Set() — представляет ключи коллекции в виде множества; • Object put (Object key. Object value) — добавляет пару "key— value", если такой пары не было, и заменяет значение ключа key, если такой ключ уже есть в коллекции; • void put. All (Map m) — добавляет к коллекции все пары из отображения m; • Collection values() — представляет все значения в виде коллекции. 70
Библиотека классов Java Коллекции. Интерфейс Map. Entry • методы get. Key() и get. Value() позволяют получить ключ и значение пары; • метод set. Value (Object value) меняет значение в данной паре. for (Iterator it=map. entry. Set(). iterator(); it. has. Next(); ) { Map. Entry entry = (Map. Entry)it. next(); Object key = entry. get. Key(); Object value = entry. get. Value(); } 71
Библиотека классов Java Коллекции. Интерфейс Sorted. Map, расширяющий интерфейс Map, описывает упорядоченную по ключам коллекцию Map. Сортировка производится либо в естественном порядке возрастания ключей, либо в порядке, описываемом в интерфейсе Comparator. 72
Библиотека классов Java Коллекции. Интерфейс Sorted. Map • Comparator comparator() — возвращает способ упорядочения коллекции; • Object first. Key() — возвращает первый, меньший элемент коллекции; • Sorted. Map head. Map (Object to. Key) — Возвращает начало коллекции до элемента с ключом to. Kеу исключительно; • Object last. Key() — возвращает последний, больший ключ коллекции; 73
Библиотека классов Java Коллекции. Интерфейс Sorted. Map • Sorted. Map sub. Map (Object from. Key, Object to. Key) — возвращает часть коллекции от элемента с ключом from. Key включительно до элемента с ключом to. Key исключительно; • Sorted. Map tail. Map(Object from. Key) — возвращает остаток коллекции от элемента from. Key включительно. 74
Библиотека классов Java Коллекции. Интерфейс List. Iterator • void add(Object element) — добавляет элемент element перед текущим элементом; • boolean has. Previous() — возвращает true, если в коллекции есть элементы, стоящие перед текущим элементом; • int next. Index() — возвращает индекс текущего элемента; если текущим является последний элемент коллекции, возвращает размер коллекции; 75
Библиотека классов Java Коллекции. Интерфейс List. Iterator • Object previous() — возвращает предыдущий элемент и делает его текущим; • int previous. Index() — возвращает индекс предыдущего элемента; • void set(Object element) — заменяет текущий элементом element; выполняется сразу после next() или previous(). 76
Библиотека классов Java Коллекции. Интерфейс Comparator • int compare (Object obj 1, object obj 2) — возвращает отрицательное число, если obj 1 в каком-то смысле меньше obj 2; нуль, если они считаются равными; положительное число, если objl больше obj 2. С точки зрения теории множеств можно сказать, что этот метод сравнения обладает свойствами тождества, антисимметричности и транзитивности; • boolean equals (Object obj) — сравнивает данный объект с объектом obj, возвращая true, если объекты совпадают в каком-либо смысле, заданном этим методом. 77
Библиотека классов Java Коллекции. Реализации 78
Библиотека классов Java Коллекции. Реализации General-purpose Implementations Interfaces Implementations Hashtable Resizable array Tree Linked Hash table + list Linked list Set Hash. Set Tree. Set Linked. Hash. Set List Array. List Linked List Map Hash. Map Tree. Map Linked. Hash. Map 79
Библиотека классов Java Коллекции. Реализации class Complex. Compare implements Comparator {public int compare(Object obj 1. Object obj 2) {Complex z 1 = (Complex)obj 1, z 2 = (Complex)obj 2; double re 1 = z 1. get. Re(), im 1 = z 1. getlm(); double re 2 = z 2. get. Re(), im 2 = z 2. getlm(); if (re 1 != re 2) return (int)(re 1 - re 2); else if (im 1 != im 2) return (int)(im 1 — im 2) ; else return 0; } public boolean equals(Object z) {return compare (this, z) == 0; } } 80
Библиотека классов Java Коллекции. Реализации Tree. Set ts = new Tree. Set(new Complex. Compare()); ts. add(new Complex(1. 2, 3. 4)); ts. add(new Complex(-1. 25, 33. 4)); ts. add(new Complex(1. 23, -3. 45)); ts. add(new Complex(16. 2, 23. 4)); Iterator it = ts. iterator(); while(it. has. Next()) ((Complex)it. next()). print(); 81
Библиотека классов Java Коллекции. Алгоритмы сортировки Сортировка может быть сделана только в упорядочиваемой коллекции, реализующей интерфейс List. Методы: • static void sort (List coll) — сортирует в естественном порядке возрастания коллекцию coll, реализующую интерфейс List; • static void sort (List coll, Comparator с) — сортирует коллекцию coll в порядке, заданном объектом с. 82
Библиотека классов Java Коллекции. Алгоритмы сортировки Сортировка является быстрой и стабильной: 1) гарантирована скорость не ниже n*log(n) 2) равные элементы не переупорядочиваются public class Sort { public static void main(String[ ] args) { List<String> list = Arrays. as. List(args); Collections. sort(list); System. out. println(list); } } 83
Библиотека классов Java Коллекции. Алгоритмы поиска • static int binary. Search(List coll, Object element) — отыскивает элемент element в отсортированной в естественном порядке возрастания коллекции coll и возвращает индекс элемента или отрицательное число, если элемент не найден; отрицательное число показывает индекс, с которым элемент element был бы вставлен в коллекцию, с обратным знаком; • static int binary. Search(List coll, Object element. Comparator с) — то же, но коллекция отсортирована в порядке, определенном объектом с. 84
Библиотека классов Java Коллекции. Алгоритмы «перемешивания» • static void shuffle (List coll) — случайные числа задаются по умолчанию; • static void shuffle (List coll, Random r) — случайные числа определяются объектом r. 85
Библиотека классов Java Коллекции. Алгоритмы манипуляции с данными - reverse(List coll) меняет порядок расположения элементов на обратный. - copy(List from, List to) копирует коллекцию from в коллекцию to. - fill(List coll, Object element) заменяет все элементы существующей коллекции coll элементом element. - swap(List coll, int i 1, int i 2) меняет местами элементы 86
Библиотека классов Java Коллекции. Алгоритмы экстремумов - static Object max (Collection coll) – возвращает наибольший в естественном порядке элемент коллекции coll; - static Object max (Collection coll, Comparator c) — то же в порядке, заданном объектом с; - static object min (Collection coll) — возвращает наименьший в естественном порядке элемент коллекции coll; - static Object min (Collection coil, Comparator c) — то же в порядке, заданном объектом с. 87
Библиотека классов Java Коллекции. Алгоритмы объединения - int frequency(Collection coll, Object element) — считает кол-во появлений указанного элемента в коллекции - disjoint(Collection coll 1, Collections coll 2) — определяет пересекаются ли две коллекции 88
Java_Lecture6.ppt