Задание по программированию на языке Java-7.pptx
- Количество слайдов: 25
Задание по программированию на языке Java-7.
Содержание 1. Коллекции. 2. java. util и java. text 2. 1. java. util 2. 1. 1. Интерфейсы 2. 1. 2. Класс Arrays 2. 1. 3. Класс Locale 2. 2. java. text 2. 2. 1. Интерфейсы 2. 2. 2. Класс Collator 3. Формулировка задачи. 4. Решение задачи.
1. Коллекции – это хранилища, поддерживающие различные способы накопления и упорядочения объектов с целью обеспечения возможностей эффективного доступа к ним. Они представляют собой реализацию абстрактных типов (структур) данных, поддерживающих три основные операции: o Добавление нового элемента в коллекцию; o Удаление элемента из коллекции; o Изменение элемента в коллекции. В качестве других операций могут быть реализованы следующие: просмотреть элементы, подсчитать их количество и др.
Существует несколько различных типов классовколлекций. Все они разрабатывались, по возможности, в соответствии с единой логикой и определенными интерфейсами и там, где это возможно, работа с ними унифицирована. Однако все коллекции отличаются внутренними механизмами хранения, скоростью доступа к элементам, потребляемой памятью и другими деталями. Например, в некоторых коллекциях объекты (также называемые элементами коллекций), могут быть упорядочены, в некоторых - нет. В некоторых типах коллекций допускается дублирование ссылок на объект, в некоторых - нет.
2. java. util и java. text 2. 1. java. util – вспомогательные классы, обеспечивающие работу со структурами данных и форматирование текста с учетом локализации. Интерфейс Collection 2. 1. 1. Интерфейсы Данный интерфейс является корнем всей иерархии классов-коллекций. Он определяет базовую функциональность любой коллекции - набор методов, которые позволяют добавлять, удалять, выбирать элементы коллекции. Классы, которые реализуют интерфейс Collection, могут содержать дубликаты и пустые ( null ) значения. Abstract. Collection, как абстрактный класс, служит основой для создания конкретных классов коллекций и содержит реализацию некоторых методов, определенных в интерфейсе Collection. Интерфейс Set Классы, которые реализуют этот интерфейс, не допускают наличия дубликатов. В коллекции этого типа разрешено наличие только одной ссылки типа null. Интерфейс Set расширяет интерфейс Collection, таким образом, любой класс, имплементирующий Set, реализует все методы, определенные в Collection. Любой объект, добавляемый в Set, должен реализовать метод equals, чтобы его можно было сравнить с другими. Abstract. Set, являясь абстрактным классом, представляет собой основу для реализации различных вариантов интерфейса Set.
Интерфейс List Классы, реализующие этот интерфейс, содержат упорядоченную последовательность объектов (объекты хранятся в том порядке, в котором они были добавлены). Интерфейс List расширяет интерфейс Collection, и любой класс, имплементирующий List, реализует все методы, определенные в Collection, и в то же время вводятся новые методы, которые позволяют добавлять и удалять элементы из списка. List также обеспечивает List. Iterator, который позволяет перемещаться как вперед, так и назад по элементам списка. Abstract. List, как абстрактный класс, представляет собой основу для реализации различных вариантов интерфейса List. Интерфейс Map Классы, которые реализуют этот интерфейс, хранят неупорядоченный набор объектов парами ключ/значение. Каждый ключ должен быть уникальным. Порядок следования пар ключ/значение не определен. Интерфейс Map не расширяет интерфейс Collection. Abstract. Map, будучи абстрактным классом, представляет собой основу для реализации различных вариантов интерфейса Map.
Интерфейс Sorted. Set Этот интерфейс расширяет Set, требуя, чтобы содержимое набора было упорядочено. Такие коллекции могут содержать объекты, которые реализуют интерфейс Comparable, либо могут сравниваться с использованием внешнего Comparator. Интерфейс Sorted. Map Этот интерфейс расширяет Map, требуя, чтобы содержимое коллекции было упорядочено по значениям ключей. Интерфейс Iterator В Java 1 для перебора элементов коллекции использовался интерфейс Enumeration. В Java 2 для этих целей должны применяться объекты, которые реализуют интерфейс Iterator. Все классы, которые реализуют интерфейс Collection, должны реализовать метод iterator, который возвращает объект, реализующий интерфейс Iterator весьма похож на Enumeration, с тем лишь отличием, что в нем определен метод remove, который позволяет удалить объект из коллекции, для которой Iterator был создан.
2. 1. 2. Класс Arrays В пакете java. util находится класс Arrays, который содержит методы манипулирования содержимым массива, а именно для поиска, заполнения, сравнения, преобразования в коллекцию и прочие: int binary. Search(параметры) – перегруженный метод организации бинарного поиска значения в массивах и объектных типов. Возвращает позицию первого совпадения; void fill(параметры) – перегруженный метод для заполнения массивов значениями различных типов примитивами; void sort(параметры) – перегруженный метод сортировки массива или его части с использованием интерфейса Comparator и без него; static
Пример: package chapt 10; import java. util. *; public class Arrays. Equal. Demo{ public static void main(String[] args){ char m 1[] = new char[3]; char m 2[] = {‘a’, ’b’, ’c’}, I; Arrays. fill(m 1, ’a’); System. out. print(“массив m 1: ”); for (i=0; i<3; i++) System. out. print(“ “+m 1[i]); m 1[1] = ‘b’; m 1[2] = ‘c’; //m 1[2]=‘x’//приведет к другому результату if (Arrays. equals(m 1, m 2)) System. out. print(“nm 1 и m 2 эквивалентны”); else System. out. print(“nm 1 и m 2 не эквивалентны”); m 1[0] = ‘z’; Arrays. sort(m 1); System. out. print(“nмассив m 1: ”); for (i=0; i<3; i++)
} System. out. print(“ “+m 1[i]); System. out. print(“n значение ‘c’ находится в позиции - ” + Arrays. binary. Search(m 1, ‘c’)); Integer arr[] = {35, 71, 92}; System. out. ptintln(Arrays. deep. To. String(arr)); //вывод массива объектов в строку System. out. ptintln(Arrays. deep. Hash. Code(arr)); //вычисление хэш-кода и значений Integer arr 2[] = {35, 71, 92}; System. out. ptintln(Arrays. deep. Equals(arr, arr 2)); //сравнение массива по содержимому char m 3[] = new char[5]; m 3 = Arrays. copy. Of(m 1, 5); //копирование массива System. out. print(“массив ь3: ”); for (i = 0; i< 5; i++) System. out. print(“ “ + m 3[i]); } В результате компиляции и запуска будет выведено: массив m 1: a a a m 1 и m 2 эквивалентны массив m 1: b c z значение ‘c’ находится в позиции 1 [35, 71, 92] 65719 true массив m 3: b c z
2. 1. 3. Класс Locale предназначен для отображения определенного региона. Под регионом принято понимать не только географическое положение, но также языковую и культурную среду. Например, помимо того, что указывается страна Швейцария, можно указать также и язык - французский или немецкий. Определено два варианта конструкторов в классе Locale: Locale(String language, String country) Locale(String language, String country, String variant) Первые два параметра в обоих конструкторах определяют язык и страну, для которой определяется локаль, согласно кодировке ISO. Список поддерживаемых стран и языков можно получить и с помощью вызова статических методов Locale. get. ISOLanguages() Locale. get. ISOCountries(), соответственно. Во втором варианте конструктора указан также строковый параметр variant, в котором кодируется информация о платформе. Если здесь необходимо указать дополнительные параметры, то их требуется разделить символом подчеркивания, причем, более важный параметр должен следовать первым. Пример использования: Locale l = new Locale("ru", "RU"); Locale l = new Locale("en", "US", "WINDOWS"); Статический метод get. Default() возвращает текущую локаль, сконструированную на основе настроек операционной системы, под управлением которой функционирует JVM.
Для наиболее часто использующихся локалей заданы константы. Например, Locale. US или Locale. GERMAN. После того как экземпляр класса Locale создан, с помощью различных методов можно получить дополнительную информацию о локали. public class Test { public Test() { } public static void main(String[] args) { Test test = new Test(); Locale l = Locale. get. Default(); System. out. println(l. get. Country() + " " + l. get. Display. Country() + " " + l. get. ISO 3 Country()); System. out. println(l. get. Language() + " " + l. get. Display. Language() + " " + l. get. ISO 3 Language()); System. out. println(l. get. Variant() + " " + l. get. Display. Variant()); l = new Locale("ru", "RU", "WINDOWS"); System. out. println(l. get. Country() + " " + l. get. Display. Country() + " " + l. get. ISO 3 Country()); System. out. println(l. get. Language() + " " +l. get. Display. Language() + " " +l. get. ISO 3 Language()); System. out. println(l. get. Variant() + " " + l. get. Display. Variant()); } }
Результатом будет: US United States USA en English eng RU Russia RUS ru Russian rus WINDOWS
2. 2. java. text Классы и интерфейсы этого пакета используются для организации многоязыковой поддержки. В пакете содержатся классы, предназначенные для поддержки форматов представления даты, времени, чисел и текстовых сообщений в стилях, которые приняты в местности, назначенной по умолчанию, или в любой заданной местности. В нем также содержатся классы, обеспечивающие сопоставление строк в соответствии с правилами, принятыми в данной местности, и просмотр символов, слов и предложений в строке в соответствии со стилем, принятым в данной местности.
2. 2. 1. Интерфейсы public interface Attributed. Character. Iterator extends Character. Iterator Attributed. Character. Iterator позволяет итерацию и через текст, и через связанную информацию атрибута. Атрибут является парой ключ/значение, идентифицированной ключом. Ни у каких двух атрибутов на данном символе не может быть того же самого ключа. Значения для атрибута являются неизменными, или не должны быть видоизменены клиентами или хранением. Их всегда передает ссылка, и не клонируются. Выполнение относительно атрибута является максимальным текстовым диапазоном для который: атрибут неопределен или null для всего диапазона, или значение атрибута определяется и имеет то же самое не -null значение для всего диапазона. Выполнение относительно ряда атрибутов является максимальным текстовым диапазоном, для которого это условие соблюдают для каждого задействованного атрибута. Получая выполнение без явных определенных атрибутов (то есть, вызывая get. Run. Start() и get. Run. Limit()), любые непрерывные текстовые сегменты, имеющие те же самые атрибуты (тот же самый набор пар атрибут/значение), обрабатываются как отдельные выполнения, если атрибуты были даны тем текстовым сегментам отдельно. Возвращенные индексы ограничиваются диапазоном iterator. Возвращенная информация атрибута ограничивается выполнениями, которые содержат текущий символ.
int get. Run. Start() Возвращает индекс первого символа выполнения относительно всех атрибутов, содержащих текущий символ. Любые непрерывные текстовые сегменты, имеющие те же самые атрибуты (тот же самый набор пар атрибут/значение), обрабатываются как отдельные выполнения, если атрибуты были даны тем текстовым сегментам отдельно. int get. Run. Limit() Возвращает индекс первого символа после выполнения относительно всех атрибутов, содержащих текущий символ. Любые непрерывные текстовые сегменты, имеющие те же самые атрибуты (тот же самый набор пар атрибут/значение), обрабатываются как отдельные выполнения, если атрибуты были даны тем текстовым сегментам отдельно.
public interface Character. Iterator extends Cloneable Этот интерфейс определяет протокол для двунаправленной итерации по тексту. iterator выполняет итерации по ограниченной последовательности символов. Символы индексируются со значениями, начинающимися со значения, возвращенного get. Begin. Index () и продолжающимися через значение, возвращенное get. End. Index ()-1. Iterators поддерживают текущий символьный индекс, допустимый диапазон которого от get. Begin. Index () к get. End. Index (); значение get. End. Index () включается, чтобы позволить обрабатывать текстовых диапазонов нулевых длиной и по историческим причинам. Текущий индекс может быть получен, вызывая get. Index () и установлен непосредственно, вызывая set. Index (), сначала (), и последний (). Предыдущие методы () и затем () используются для итерации. Они возвращаются СДЕЛАННЫЙ, если они переместились бы вне диапазона от get. Begin. Index () к get. End. Index ()-1, сигнализируя, что iterator достиг конца последовательности. СДЕЛАННЫЙ также возвращается другими методами, чтобы указать, что текущий индекс вне этого диапазона.
Примеры: Пересеките текст от начала до конца public void traverse. Forward(Character. Iterator iter) { for(char c = iter. first(); c != Character. Iterator. DONE; c = iter. next()) { process. Char(c); } } Пересеките текст назад от конца, чтобы запустить public void traverse. Backward(Character. Iterator iter) { for(char c = iter. last(); c != Character. Iterator. DONE; c = iter. previous()) { process. Char(c); } }
2. 2. 2. Класс Collator Правила сравнения определяют последовательность сортировки строк. Эти правила изменяются в зависимости от локализации, потому что разные естественные языки по-разному сортируют слова. Вы можете использовать предопределенные правила сравнения, предоставляемые классом Collator для сортировки строк независимо от локализации. Чтобы создать экземпляр класса Collator, вызовите метод get. Instance. Обычно вы создаете Collator для Locale по умолчанию как в следующем примере: Collator my. Default. Collator = Collator. get. Instance(); Вы можете также задать определенную Locale, когда вы создаете Collator, так: Collator my. French. Collator = Collator. get. Instance(Locale. FRENCH); Метод get. Instance возвращает Rule. Based. Collator, который является конкретным подклассом Collator. Rule. Based. Collator содержит набор правил, которые определяют порядок сортировки строк для заданной вами локализации. Эти правила предопределены для каждой локализации. Поскольку правила инкапсулированы в Rule. Based. Collator, ваша программа не нуждается в специальных процедурах, занимающихся изменением правил сравнения с языком. Вы вызываете метод Collator. compare для выполнения сравнения строк, независимого от локализации. Метод compare возвращает целое число, меньшее, равное или большее нуля, если первая строкааргумент меньше, равна или больше второй строки-аргумента.
Следующая таблица содержит некоторые примеры вызовов Collator. compare: Примеры Collator. compare Возвращаемое значение Пояснение my. Collator. compare("abc", "def") -1 "abc" меньше, чем "def" my. Collator. compare("rtf", "rtf") 0 две строки равны my. Collator. compare("xyz", "abc") 1 "xyz" больще, чем "abc" При выполнении операций сортировки вы используете метод compare. Программа-пример, названная Collator. Demo импользует метод compare для сортировки массивов английских и французских слов. Эта программа показывает, что случается, если вы сортируете один и тот же список слов с двумя разными правилами сравнения. Collator fr_FRCollator = Collator. get. Instance(new Locale("fr", "FR")); Collator en_USCollator = Collator. get. Instance(new Locale("en", "US"));
Метод сортировки называется sort. Strings и может использоваться с любым Collator. Заметьте, что метод sort. Strings вызывает метод compare: public static void sort. Strings(Collator collator, т. String[] words) { String tmp; for (int i = 0; i < words. length; i++) { for (int j = i + 1; j < words. length; j++) { if (collator. compare(words[i], words[j]) > 0) { tmp = words[i]; words[i] = words[j]; words[j] = tmp; } } Для английского Collator сортирует слова так: peach péché pêche sin В соответствии с правилами сравнения французского языка порядок в предыдущем списке неправильный. Во французским péché должно следовать за pêche в отсортированном списке. Французский Collator сортирует массив слов правильно, так: peach pêche péché sin
3. Формулировка задачи. Дан входной набор слов немецкого языка. Проверить правильность записи этих слов. В случае обнаружения недопустимого символа, выдать номер слова и номер позиции в слове. Отсортировать слова в алфавитном порядке.
4. Решение задачи package germane; import java. util. *; import java. text. *; public class GERMANE { public static Locale germane. Locale; public static Collator de_Collator; public static void sort. Strings(Collator collator, String[] words) { String tmp; for (int i = 0; i < words. length; i++) { for (int j = i + 1; j < words. length; j++) { if (collator. compare(words[i], words[j]) > 0) { tmp = words[i]; words[i] = words[j]; words[j] = tmp; } }
public static void main(String[] args) { germane. Locale = new Locale("GERMANE"); de_Collator = Collator. get. Instance(german. Locale); int n=args. length; String [] array = new String[n]; System. arraycopy(args, 0, array, 0, n); //Проверяем слова. В случае ошибки выдаем номер слова //и индекс неправильного символа. for(int i=0; i
String [] words = new String [args. length] ; System. arraycopy(args, 0, words, 0, args. length); sort. Strings(de_Collator, words); for(int i=0 ; i


