2 страница. static String format(String format, Object
static String format(String format, Object... args), format(Locale l, String format, Object... args) – генерирует форматированную строку, полученную с использованием формата, интернацио- нализации и др.; String[] split(String regex), split(String regex, int limit) – поиск вхождения в строку заданного регулярного выражения (раздели- теля) и деление исходной строки в соответствии с этим на массив строк. Во всех случаях вызова методов, изменяющих строку, создается новый объ- ект типа String.
18. Классы StringBuilder и StringBuffer.
Классы StringBuilder и StringBuffer являются “близнецами” и по своему предназначению близки к классу String, но, в отличие от по- следнего, содержимое и размеры объектов классов StringBuilder и StringBuffer можно изменять. Основным и единственным отличием StringBuilder от StringBuffer является потокобезопасность последнего. В версии 1.5.0 был добавлен непотоко- безопасный (следовательно, более быстрый в обработке) класс StringBuilder, который следует применять, если не существует вероятности использования объекта в конкурирующих потоках. С помощью соответствующих методов и конструкторов объекты классов StringBuffer, StringBuilder и String можно преобразовывать друг в друга. Конструктор класса StringBuffer (также как и StringBuilder) мо- жет принимать в качестве параметра объект String или неотрицательный раз- мер буфера. Объекты этого класса можно преобразовать в объект класса String методом toString() или с помощью конструктора класса String.
При создании объекта StringBuffer конструктор по умолчанию автомати- чески резервирует некоторый объем памяти (16 символов), что в дальнейшем поз- воляет быстро менять содержимое объекта, оставаясь в границах участка памяти, выделенного под объект. Размер резервируемой памяти при необходимости мож- но указывать в конструкторе. Если длина строки StringBuffer после измене- ния превышает его размер, то ёмкость объекта автоматически увеличивается, оставляя при этом резерв для дальнейших изменений. С помощью метода re- verse() можно быстро изменить порядок символов в объекте. Если метод, вызываемый объектом StringBuffer, производит измене- ния в его содержимом, то это не приводит к созданию нового объекта, как в случае объекта String, а изменяет текущий объект StringBuffer.
void setLength(int n) – установка размера буфера; void ensureCapacity(int minimum) – установка гарантированного минимального размера буфера; int capacity() – возвращение текущего размера буфера; StringBuffer append(параметры) – добавление к содержимому объ- екта строкового представления аргумента, который может быть символом, значе- нием базового типа, массивом и строкой; StringBuffer insert(параметры) – вставка символа, объекта или строки в указанную позицию; StringBuffer deleteCharAt(int index) – удаление символа; StringBuffer delete(int start, int end) – удаление подстроки; StringBuffer reverse() – обращение содержимого объекта. В классе присутствуют также методы, аналогичные мето
дам класса String, такие как replace(), substring(), charAt(), length(), getChars(), indexOf() и др.
19. Форматирование строк.
Для создания форматированного текстового вывода предназначен класс java.util.Formatter. Этот класс обеспечивает преобразование формата, позволяющее выводить числа, строки, время и даты в любом необходимом разра- ботчику виде. В классе Formatter объявлен метод format(), который преобразует пере- данные в него параметры в строку заданного формата и сохраняет в объекте типа Formatter. Аналогичный метод объявлен у классов PrintStream и PrintWriter. Кроме того, у этих классов объявлен метод printf() с парамет- рами идентичными параметрам метода format(), который осуществляет форма- тированный вывод в поток, тогда как метод format() сохраняет изменения в объ- екте типа Formatter. Таким образом, метод printf() автоматически ис- пользует возможности класса Fomatter и подобен функции printf() языка С. Класс Formatter преобразует двоичную форму представления данных в форматированный текст. Он сохраняет форматированный текст в буфере, содержимое которого можно получить в любой момент. Можно предоставить классу Formatter автоматическую поддержку этого буфера либо задать его явно при создании объекта. Существует возможность сохранения буфера класса Formatter в файле.
В классе объявлены следующие методы: Formatter format(String fmtString, Object...args) – форма- тирует аргументы, переданные в аргументе переменной длины args (количество аргументов в списке вывода не фиксировано), в соответствии со спецификатора- ми формата, содержащимися в fmtString. Возвращает вызывающий объект; Formatter format(Locale loc, String fmtString, Object...args) – форматирует аргументы, переданные в аргументе перемен- ной длины args, в соответствии со спецификаторами формата, содержащимися в fmtString. При форматировании используются региональные установки, за- данные в lос. Возвращает вызывающий объект; IOException ioException() – если объект, приемник отформатирован- ного вывода, генерирует исключение типа IOException, возвращает это ис- ключение. В противном случае возвращает null; Locale locale() – возвращает региональные установки вызывающего объекта; Appendable out() – возвращает ссылку на базовый объект-приемник для выходных данных; void flush() – переносит информацию из буфера форматирования и про- изводит запись в указанное место выходных данных, находящихся в буфере. Ме- тод чаще всего используется объектом класса Formatter, связанным с файлом; void close() – закрывает вызывающий объект класса Formatter, что приводит к освобождению ресурсов, используемых объектом. После закрытия объекта типа Formatter он не может использоваться повторно. Попытка исполь- зовать закрытый объект приводит к генерации исключения типа FormatterClosedEception; String toString() – возвращает объект типа String, содержащий от- форматированный вывод.
20. Регулярные выражения.
Pattern compile(String regex) – возвращает Pattern, который со- ответствует regex. Matcher matcher(CharSequence input) – возвращает Matcher, с помощью которого можно находить соответствия в строке input. boolean matches(String regex, CharSequence input) – про- веряет на соответствие строки input шаблону regex. String pattern() – возвращает строку, соответствующую шаблону. String[] split(CharSequence input) – разбивает строку input, учитывая, что разделителем является шаблон. String[] split(CharSequence input, int limit) – разбивает строку input на не более чем limit частей. С помощью метода matches() класса Pattern можно проверять на соот- ветствие шаблону целой строки, но если необходимо найти соответствия внутри строки, например, определять участки, которые соответствуют шаблону, то класс Pattern не может быть использован. Для таких операций необходимо использо- вать класс Matcher. Начальное состояние объекта типа Matcher не определено. Попытка выз- вать какой-либо метод класса для извлечения информации о найденном соответ- ствии приведет к возникновению ошибки IllegalStateException. Для того чтобы начать работу с объектом Matcher, нужно вызвать один из его методов: boolean matches() – проверяет, соответствует ли вся строка шаблону; boolean lookingAt() – пытается найти последовательность символов, начинающуюся с начала строки и соответствующую шаблону; boolean find() или boolean find(int start) – пытается найти по- следовательность символов, соответствующих шаблону, в любом месте строки. Параметр start указывает на начальную позицию поиска. Иногда необходимо сбросить состояние Matcher’а в исходное, для этого применяется метод reset() или reset(CharSequence input), который также устанавливает новую последовательность символов для поиска. Для замены всех подпоследовательностей символов, удовлетворяющих шаб- лону, на заданную строку можно применить метод replaceAll(String replacement). Для того чтобы ограничить поиск границами входной последовательности, применяется метод region(int start, int end), а для получения значе- ния этих границ – regionEnd() и regionStart(). С регионами связано не- сколько методов: Matcher useAnchoringBounds(boolean b) – если установлен в true, то начало и конец региона соответствуют символам ^ и $ соответственно.
boolean hasAnchoringBounds() – проверяет закрепленность границ. В регулярном выражении для более удобной обработки входной после- довательности применяются группы, которые помогают выделить части найден- ной подпоследовательности. В шаблоне они обозначаются скобками “(“ и “)”. Номера групп начинаются с единицы. Нулевая группа совпадает со всей найден- ной подпоследовательностью. Далее приведены методы для извлечения информа- ции о группах. int end() – возвращает индекс последнего символа подпоследовательно- сти, удовлетворяющей шаблону; int end(int group) – возвращает индекс последнего символа указанной группы; String group() – возвращает всю подпоследовательность, удовлетворя- ющую шаблону; String group(int group) – возвращает конкретную группу; int groupCount() – возвращает количество групп; int start() – возвращает индекс первого символа подпоследовательно- сти, удовлетворяющей шаблону; int start(int group) – возвращает индекс первого символа указанной группы; boolean hitEnd() – возвращает истину, если был достигнут конец вход- ной последовательности.
21. Интернационализация текста.
Класс java.util.Locale позволяет учесть особенности региональных представлений алфавита, символов и проч. Автоматически виртуальная машина использует текущие региональные установки операционной системы, но при необходимости их можно изменять. Для некоторых стран региональные параметры устанавливаются с помощью констант, например: Locale.US, Locale.FRANCE. Для других стран объект Locale нужно создавать с по- мощью конструктора: Locale myLocale = new Locale("bel", "BY"); Получить доступ к текущему варианту региональных параметров можно сле- дующим образом: Locale current = Locale.getDefault(); Если, например, в ОС установлен регион «Россия» или в приложении с помощью new Locale("ru", "RU"), то следующий код (при выводе результатов вы- полнения на консоль)
current.getCountry();//код региона
current.getDisplayCountry();//название региона
current.getLanguage();//код языка региона
current.getDisplayLanguage();//название языка региона
позволяет получить информацию о регионе в виде:
RU
Россия
ru
русский
Для создания приложений, поддерживающих несколько языков, существует целый ряд решений. Самое логичное из них – использование взаимодействия классов java.util.ResourceBundle и Locale. Класс ResourceBundle предназначен в первую очередь для работы с текстовыми файлами свойств (рас- ширение .properties). Каждый объект ResourceBundle представляет со- бой набор объектов соответствующих подтипов, которые разделяют одно и то же базовое имя, к которому можно получить доступ через поле parent. Следующий список показывает возможный набор соответствующих ресурсов с базовым име- нем text. Символы, следующие за базовым именем, показывают код языка, код страны и тип операционной системы. Например, файл text_de_CH.properties соответствует объекту Locale, заданному кодом языка немецкого (de) и кодом страны Швейцарии (CH).
Чтобы выбрать определенный объект ResourceBundle, следует вызвать метод ResourceBundle.getBundle(параметры). Следующий фрагмент выбирает text объекта ResourceBundle для объекта Locale, который соот- ветствует английскому языку, стране Канаде и платформе UNIX. Locale currentLocale = new Locale("en", "CA", "UNIX"); ResourceBundle rb = ResourceBundle.getBundle("text", currentLocale);
22. Иерархия и способы обработки. Оператор throw.Ключевое слово finally.
Исключительные ситуации (исключения) возникают во время выполнения программы, когда возникшая проблема не может быть решена в текущем контек- сте и невозможно продолжение работы программы. Примерами являются особо «популярные»: попытка индексации вне границ массива, вызов метода на нулевой ссылке или деление на нуль. При возникновении исключения создается объект, описывающий это исключение. Затем текущий ход выполнения приложения оста- навливается, и включается механизм обработки исключений. При этом ссылка на объект-исключение передается обработчику исключений, который пытается ре- шить возникшую проблему и продолжить выполнение программы. Если в классе используется метод, в котором может возникнуть проверяемая исключительная ситуация, но не предусмотрена ее обработка, то ошибка возникает еще на этапе компиляции. При создании такого метода программист должен включить в код обработку исключений, которые могут генерировать этот метод, или передать об- работку исключения на более высокий уровень методу, вызвавшему данный метод. Каждой исключительной ситуации поставлен в соответствие некоторый класс. Если подходящего класса не существует, то он может быть создан разра- ботчиком. Все исключения являются наследниками суперкласса Throwable и его подклассов Error и Exception из пакета java.lang.
Исключительные ситуации типа Error возникают только во время вы- полнения программы. Такие исключения связаны с серьезными ошибками, к примеру – переполнение стека, и не подлежат исправлению и не могут об- рабатываться приложением.
Во время выполнения могут генерироваться также исключения, которые могут быть обработаны без ущерба для выполнения программы.
Обычно используется один из трех способов обработки исключений: перехват и обработка исключения в блоке try-catch метода; объявление исключения в секции throws метода и передача вызыва- ющему методу (для проверяемых исключений); использование собственных исключений.
В программировании часто возникают ситуации, когда программисту необ- ходимо самому инициировать генерацию исключения для указания, например, на заведомо ошибочный результат выполнения операции, на некорректные значения параметра метода и др. Исключительную ситуацию можно создать с помощью оператора throw, если объект-исключение уже существует, или инициализиро- вать его прямо после этого оператора. Оператор throw используется для генера- ции исключения. Для этого может быть использован объект класса Throwable или объект его подкласса, а также ссылки на них. Общая форма записи инструк- ции throw, генерирующей исключение: throw объектThrowable;
При достижении оператора throw выполнение кода прекращается. Ближай- ший блок try проверяется на наличие соответствующего обработчика catch. Если он существует, управление передается ему, иначе проверяется следующий из вложенных операторов try. Инициализация объекта-исключения без операто- ра throw никакой исключительной ситуации не вызовет
Возможна ситуация, при которой нужно выполнить некоторые действия по завершению программы (закрыть поток, освободить соединение с базой данных) вне зависимости от того, произошло исключение или нет. В этом случае исполь- зуется блок finally, который выполняется после инструкций try или catch
Каждому разделу try должен соответствовать по крайней мере один раздел catch или блок finally. Блок finally часто используется для закрытия файлов и освобождения других ресурсов, захваченных для временного использо- вания в начале выполнения метода. Код блока выполняется перед выходом из метода даже в том случае, если перед ним были выполнены инструкции вида re- turn, break, continue.
23. Собственные исключения. Наследование и исключения. Отладочный механизм assertion.
Разработчик может создать собственное исключение как подкласс класса Exception и затем использовать его при обработке ситуаций, не являющихся исключениями с точки зрения языка, но нарушающих логику вещей.
Борьба за качество программ ведется всеми возможными способами. На этапе отладки найти неявные ошибки в функционировании приложения бывает доволь- но сложно. Например, в методе, устанавливающем возраст пользователя, инфор- мация о возрасте извлекается из внешних источников (файл, БД), и в результате получается отрицательное значение. Далее неверные данные влияют на результат вычисления среднего возраста пользователей и т.д. Определять и исправлять та- кие ситуации позволяет механизм проверочных утверждений (assertion). При по- мощи этого механизма можно сформулировать требования к входным, выходным и промежуточным данным методов классов в виде некоторых логических условий. Попытка обработать ситуацию появления отрицательного возраста может вы- глядеть следующим образом: int age = ob.getAge(); if (age >= 0) { // реализация } else { // сообщение о неправильных данных } Теперь механизм assertion позволяет создать код, который будет генерировать исключение на этапе отладки проверки постусловия или промежуточных данных в виде: int age = ob.getAge(); assert (age >= 0): "NEGATIVE AGE!!!"; // реализация
Правописание инструкции assert: assert (boolexp): expression; assert (boolexp); Выражение boolexp может принимать только значение типов boolean или Boolean, а expression – любое значение, которое может быть преобра- зовано к строке. Если логическое выражение получает значение false, то гене- рируется исключение AssertionError, и выполнение программы прекращает- ся с выводом на консоль значения выражения expression (если оно задано).
24. Класс File. Байтовые и символьные потоки ввода/вывода. Предопределенные потоки.
Для работы с физическим файлами и каталогами (директориями), располо- женными на внешних носителях, в приложениях Java используются классы из пакета java.io. Класс File служит для хранения и обработки в качестве объектов каталогов и имен файлов. Этот класс не содержит методы для работы с содержимым файла, но позволяет манипулировать такими свойствами файла, как права доступа, дата и время создания, путь в иерархии каталогов, создание, удаление файла, изменение его имени и каталога и т.д.
При создании объекта класса File любым из конструкторов компилятор не выполняет проверку на существование физического файла с заданным путем. Существует разница между разделителями, употребляющимися при записи пути к файлу: для системы Unix – “/”, а для Windows – “\\”. Для случаев, когда неизвестно, в какой системе будет выполняться код, предусмотрены специальные поля в классе File: public static final String separator; public static final char separatorChar; С помощью этих полей можно задать путь, универсальный в любой системе: File myFile = new File(File.separator + ”com” + File.separator + ”myfile.txt” ); Также предусмотрен еще один тип разделителей – для директорий: public static final String pathSeparator; public static final char pathSeparatorChar; К примеру, для ОС Unix значение pathSeparator=”;”, а для Windows – pathSeparator=”:”.
При создании приложений всегда возникает необходимость прочитать инфор- мацию из какого-либо источника и сохранить результат. Действия по чтению/за- писи информации представляют собой стандартный и простой вид деятельности. Самые первые классы ввода/вывода связаны с передачей и извлечением последо- вательности байтов. Потоки ввода последовательности байтов являются подклассами абстракт- ного класса InputStream, потоки вывода подклассами абстрактного класса OutputStream. Эти классы являются суперклассами для ввода массивов бай- тов, строк, объектов, а также для выбора из файлов и сетевых соединений. При работе с файлами используются подклассы этих классов соответственно FileInputStream и FileOutputStream, конструкторы которых открыва- ют поток и связывают его с соответствующим физическим файлом.
Для чтения байта или массива байтов используются абстрактные методы read() и read(byte[] b) класса InputStream. Метод возвращает -1, если достигнут конец потока данных, поэтому возвращаемое значение имеет тип int, не byte. При взаимодействии с информационными потоками возмож- ны различные исключительные ситуации, поэтому обработка исключений вида try-catch при использовании методов чтения и записи является обязатель- ной. В конкретных классах потоков ввода указанные выше методы реализованы в соответствии с предназначением класса. В классе FileInputStream данный метод читает один байт из файла, а поток System.in как встроенный объект подкласса InputStream позволяет вводить информацию с консоли. Абстракт- ный метод write(int b) класса OutputStream записывает один байт в поток вывода. Оба эти метода блокируют поток до тех пор, пока байт не будет записан или прочитан. После окончания чтения или записи в поток его всегда следует закрывать с помощью метода close(), для того чтобы освободить ре- сурсы приложения.
В отличие от классов FileInputStream и FileOutputStream класс RandomAccessFile позволяет осуществлять произвольный доступ к потокам как ввода, так и вывода. Поток рассматривается при этом как массив байтов, до- ступ к элементам осуществляется с помощью метода seek(long poz). Для создания потока можно использовать один из конструкторов: RandomAccessFile(String name, String mode); RandomAccessFile(File file, String mode);
Система ввода/вывода языка Java содержит стандартные потоки ввода, выво- да и вывода ошибок. Класс System пакета java.lang содержит поле in, ко- торое является ссылкой на объект класса InputStream, и поля out, err – ссылки на объекты класса PrintStream, объявленные со спецификаторами public static и являющиеся стандартными потоками ввода, вывода и вы- вода ошибок соответственно. Эти потоки связаны с консолью, но могут быть переназначены на другое устройство.
25. Класс Scanner.
Объект класса java.util.Scanner принимает форматированный объект (ввод) и преобразует его в двоичное представление. При вводе могут использо- ваться данные из консоли, файла, строки или любого другого источника, реали- зующего интерфейсы Readable или ReadableByteChannel. Класс определяет следующие конструкторы: Scanner(File source) throws FileNotFoundException Scanner(File source, String charset) throws FileNotFoundException Scanner(InputStream source) Scanner(InputStream source, String charset) Scanner(Readable source) Scanner(ReadableByteChannel source) Scanner(ReadableByteChannel source, String charset) Scanner(String source), где source – источник входных данных, а charset – кодировка. Объект класса Scanner читает лексемы из источника, указанного в кон- структоре, например из строки или файла. Лексема – это набор данных, выделен- ный набором разделителей (по умолчанию пробелами). В случае ввода из консо- ли следует определить объект: Scanner con = new Scanner(System.in); После создания объекта его используют для ввода, например целых чисел, следующим образом: write(con.hasNextInt()) { int n = con.nextInt(); }
Объект класса Scanner определяет границы лексемы, основываясь на набо- ре разделителей. Можно задавать разделители с помощью метода useDelimiter(Pattern pattern) или useDelimiter(String pattern), где pattern содержит набор разделителей.
26. Коллекции. Общие определения.
Коллекции – это хранилища, поддерживающие различные способы накопле- ния и упорядочения объектов с целью обеспечения возможностей эффективного доступа к ним. Они представляют собой реализацию абстрактных типов (структур) данных, поддерживающих три основные операции: добавление нового элемента в коллекцию; удаление элемента из коллекции; изменение элемента в коллекции. В качестве других операций могут быть реализованы следующие: просмот- реть элементы, подсчитать их количество и др. Применение коллекций обусловливается возросшими объемами обрабатыва- емой информации. Когда счет используемых объектов идет на сотни тысяч, мас- сивы не обеспечивают ни должной скорости, ни экономии ресурсов.
Коллекции в языке Java объединены в библиотеке классов java.util и представляют собой контейнеры для хранения и манипулирования объектами. До появления Java 2 эта библиотека содержала классы только для работы с про- стейшими структурами данных: Vector, Stack, Hashtable, BitSet, а также интерфейс Enumeration для работы с элементами этих классов. Коллекции, появившиеся в Java 2, представляют общую технологию хранения и доступа к объектам. Скорость обработки коллекций повысилась по сравнению с предыду- щей версией языка за счет отказа от их потокобезопасности. Поэтому если объект коллекции может быть доступен из различных потоков, что наиболее естественно для распределенных приложений, следует использовать коллекции из Java 1. Так как в коллекциях при практическом программировании хранится набор ссылок на объекты одного типа, следует обезопасить коллекцию от появления ссылок на другие не разрешенные логикой приложения типы. Такие ошибки при использовании нетипизированных коллекций выявляются на стадии выполнения, что повышает трудозатраты на исправление и верификацию кода. Поэтому начи- ная с версии 5.0 коллекции стали типизированными.
Интерфейсы коллекций: Map<K,V> – карта отображения вида “ключ-значение”; Collection<E> – вершина иерархии остальных коллекций; List<E> – специализирует коллекции для обработки списков; Set<E> – специализирует коллекции для обработки множеств, содержащих уникальные элементы. Все классы коллекций реализуют также интерфейсы Serializable, Cloneable (кроме WeakHashMap). Кроме того, классы, реализующие интер- фейсы List<E> и Set<E>, реализуют также интерфейс Iterable<E>. В интерфейсе Collection<E> определены методы, которые работают на всех коллекциях: boolean add(E obj) – добавляет obj к вызывающей коллекции и воз- вращает true, если объект добавлен, и false, если obj уже элемент коллекции; boolean addAll(Collection<? extends E> c) – добавляет все элементы коллекции к вызывающей коллекции; void clear() – удаляет все элементы из коллекции; boolean contains(Object obj) – возвращает true, если вызывающая коллекция содержит элемент obj; boolean equals(Object obj) – возвращает true, если коллекции эк- вивалентны; boolean isEmpty() – возвращает true, если коллекция пуста; Iterator<E> iterator() – извлекает итератор; boolean remove(Object obj) – удаляет obj из коллекции; int size() – возвращает количество элементов в коллекции; Object[] toArray() – копирует элементы коллекции в массив объектов; <T> T[] toArray(T a[]) – копирует элементы коллекции в массив объ- ектов определенного типа. Для работы с элементами коллекции применяются следующие интерфейсы: Comparator<T> – для сравнения объектов; Iterator<E>, ListIterator<E>, Map.Entry<K,V> – для перечисления и доступа к объектам коллекции.
Интерфейс Iterator<E> используется для построения объектов, которые обеспечивают доступ к элементам коллекции. К этому типу относится объект, возвращаемый методом iterator(). Такой объект позволяет просматривать
содержимое коллекции последовательно, элемента за элементом. Позиции итера- тора располагаются в коллекции между элементами. В коллекции, состоящей из N элементов, существует N+1 позиций итератора. Методы интерфейса Iterator<E>: boolean hasNext() – проверяет наличие следующего элемента, а в случае его отсутствия (завершения коллекции) возвращает false. Итератор при этом остается неизменным; E next() – возвращает объект, на который указывает итератор, и пере- двигает текущий указатель на следующий, предоставляя доступ к следующему элементу. Если следующий элемент коллекции отсутствует, то метод next() генерирует исключение NoSuchElementException; void remove() – удаляет объект, возвращенный последним вызовом ме- тода next(). Интерфейс ListIterator<E> расширяет интерфейс Iterator<E> и предназначен в основном для работы со списками. Наличие методов E previous(), int previousIndex() и boolean hasPrevious() обеспе- чивает обратную навигацию по списку. Метод int nextIndex() возвращает номер следующего итератора. Метод void add(E obj) позволяет вставлять элемент в список текущей позиции. Вызов метода void set(E obj) произво- дит замену текущего элемента списка на объект, передаваемый методу в качестве параметра. Интерфейс Map.Entry предназначен для извлечения ключей и значений карты с помощью методов K getKey() и V getValue() соответственно. Вы- зов метода V setValue(V value) заменяет значение, ассоциированное с те- кущим ключом.
27. Списки.
Класс ArrayList<E> – динамический массив объектных ссылок. Расширяет класс AbstractList<E> и реализует интерфейс List<E>. Класс имеет кон- структоры: ArrayList() ArrayList(Collection <? extends E> c) ArrayList(int capacity) Практически все методы класса являются реализацией абстрактных методов из суперклассов и интерфейсов. Методы интерфейса List<E> позволяют встав- лять и удалять элементы из позиций, указываемых через отсчитываемый от нуля индекс: void add(int index, E element) – вставляет element в позицию, указанную в index; void addAll(int index, Collection<? extends E> c) – встав- ляет в вызывающий список все элементы коллекции с, начиная с позиции index; E get(int index) – возвращает элемент в виде объекта из позиции index; int indexOf(Object ob) – возвращает индекс указанного объекта; E remove(int index) – удаляет объект из позиции index; E set(int index, E element) – заменяет объект в позиции index, возвращает при этом удаляемый элемент; List<E> subList(int fromIndex, int toIndex) – извлекает часть коллекции в указанных границах. Удаление и добавление элементов для такой коллекции представляет собой ресурсоемкую задачу, поэтому объект ArrayList<E> лучше всего подходит для хранения неизменяемых списков.
Дата добавления: 2015-01-10; просмотров: 1483;