Главная » Просмотр файлов » К. Арнольд, Д. Гослинг - Язык программирования Java

К. Арнольд, Д. Гослинг - Язык программирования Java (1160779), страница 48

Файл №1160779 К. Арнольд, Д. Гослинг - Язык программирования Java (К. Арнольд, Д. Гослинг - Язык программирования Java) 48 страницаК. Арнольд, Д. Гослинг - Язык программирования Java (1160779) страница 482019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 48)

Некоторые из них уже использовались в предыдущихглавах — например, классы Date и Hashtable. Имеются и другие полезные интерфейсы и классы:Коллекции:BitSet: битовый вектор с динамическим изменением размера.Enumeration: интерфейс, который возвращает объект, используемый для перечисления набора объектов (например, элементов,содержащихся в конкретной хеш-таблице).Vector: вектор, состоящий из элементов типа Object, с динамическим изменением размера.Stack: расширение класса Vector, в котором добавлены методы для работы с простейшим стеком LIFO (“последним пришел, первымвышел”).Dictionary: абстрактный класс, содержащий алгоритмы для работы с парами ключ/значение.Hashtable: реализация Dictionary, в которой для сопоставления ключа со значением используется хеш-код.Properties: расширение Hashtable, в котором строковые ключи сопоставляются со строковыми значениями.●●●●●●●Концепции проектирования:Observer/Observable: с помощью этой пары интерфейс/класс вы можете сделать свой объект “наблюдаемым” (Observable) — закрепить заним один или более объектов-наблюдателей (Observer), которые будут извещаться в том случае, если с наблюдаемым объектомпроисходит что-то интересное.●Прочее:●●●Date: работа с датами с точностью до одной секунды.Random: объекты, генерирующие последовательности псевдослучайных чисел.StringTok enizer: деление строки на лексемы с учетом символов-ограничителей.

По умолчанию ими считаются разделители (whitespace).12.1. Класс BitSetКласс BitSet позволяет создать битовый вектор, размер которого изменяется динамически. Фактически BitSet представляет собой набор битов созначениями true или false размером до 232–1, причем изначально все биты равны false. Для хранения набора выделяется объем памяти,необходимый для хранения вектора вплоть до старшего бита, который устанавливался или сбрасывался в программе — все превышающие егобиты считаются равными false.При создании объекта BitSet можно явно задать исходный размер набора или воспользоваться безаргументным конструктором для установкиразмера по умолчанию.public void set(int bit)Устанавливает бит в позиции bit, присваивая ему значение true.public void clear(int bit)Сбрасывает бит в позиции bit, присваивая ему значение false.public boolean get(int bit)Возвращает значение бита в позиции bit.public void and(BitSet other)Выполняет операцию логического И над данным набором и other и присваивает результат данному набору.public void or(BitSet other)Выполняет операцию логического ИЛИ над данным набором и other и присваивает результат данному набору.public void xor(BitSet other)Выполняет операцию исключающего логического ИЛИ над данным набором и other и присваивает результат данному набору.public int size()Возвращает позицию старшего бита в наборе, который может быть установлен или сброшен без необходимости увеличения набора.public int hashCode()Возвращает хеш-код для набора, определяемый значениями битов.

Соблюдайте осторожность и не изменяйте биты набора, пока объект BitSetнаходится в хеш-таблице, иначе он будет потерян.public boolean equals(BitSet other)Возвращает true, если все биты other совпадают с битами в данном наборе.В приведенном ниже классе с помощью объекта BitSet происходит пометка символов, встречающихся в строке. Объект можно распечатать ипосмотреть, какие же символы входят в строку:public class WhichChars {private BitSet used = new BitSet();public WhichChars(String str) {for (int i = 0; i << str.length(); i++)used.set(str.charAt(i));// установить бит,// соответствующий символу}public String toString() {String desc = "[";int size = used.size();for (int i = 0; i << size; i++) {if (used.get(i))desc += (char)i;}return desc + "]";}}12.2.

Интерфейс EnumerationБольшинство классов-коллекций использует интерфейс Enumeration в качестве средства для перебора объектов, входящих в коллекцию. Крометого, этот интерфейс используется и другими классами, входящими в библиотеки Java, а также в пользовательские программы. Обычно при этомсоздается собственный класс, который реализует интерфейс Enumeration и содержит один или несколько методов, возвращающих объектEnumeration. Интерфейс Enumeration объявляет два метода:public abstract boolean hasMoreElements()Возвращает true, если перебор элементов перечисления еще не закончен. Метод может многократно вызываться между последовательнымивызовами nextElement.public abstract Object nextElement()Возвращает следующий элемент перечисления.

Вызовы этого метода осуществляют последовательный перебор всех элементов. Еслиследующего элемента не существует, возбуждается исключение NoSuchElemen tException.Приведем типичный цикл, в котором Enumeration используется для перебора элементов класса-коллекции, в данном случае — элементов хештаблицы:Enumeration e = table.elements();while (e.hasMoreElements())doSomethingWith(e.nextElement());Контракт Enumeration не гарантирует фиксации исходного состояния (snapshot guarantee).

Другими словами, если содержимое коллекцииизменяется во время итерации, это может отразиться на значениях, возвращаемых методами. Например, если в реализации nextElementиспользуется содержимое исходной коллекции, то удаление объектов из списка во время перебора может иметь разрушительные последствия.Если бы исходное состояние было зафиксировано, то работа с объектами осуществлялась бы в том виде, в каком они находились на моментсоздания Enumeration. Вы можете рассчитывать на фиксацию исходного состояния лишь в том случае, если метод, возвращающий объектEnumeration, явно это гарантирует.12.3.

Реализация интерфейса EnumerationПри разработке новых классов-коллекций может возникнуть необходимость в собственной реализации Enumeration. Приведенный выше классWhich Chars фактически представляет собой коллекцию для работы с набором символов исходной строки. Следующий класс реализуетинтерфейс Enumeration для того, чтобы возвращать символы, представленные объектом BitSet в WhichChars:class EnumerateWhichChars implements Enumeration {private BitSet bits;private int pos;// следующая проверяемая позицияprivate int setSize; // количество бит (для оптимизации)EnumerateWhichChars(BitSet whichBits) {bits = whichBits;setSize = whichBits.size();pos = 0;}public boolean hasMoreElements() {while (pos << setSize && !bits.get(pos))pos++;return (pos << setSize);}public Object nextElement() {if (hasMoreElements())return new Character((char)pos++);elsereturn null;}}Класс перебирает биты, входящие в BitSet, и возвращает объекты Character со значениями символов, которым соответствуют установленныебиты в объекте BitSet.

Метод hasMoreElements перемещает текущую позицию к следующему возвращаемому элементу. Он написан так, чтобы егоможно было многократно использовать для каждого вызова nextElement.Теперь в класс WhichChars необходимо включить метод, который возвращает объект-перечисление:public Enumeration characters() {return new EnumeratrWhichChars(used);}Обратите внимание: метод characters возвращает объект класса Enumeration, а не EnumerateWhichChars. Класс EnumerateWhichChars непредназначен для открытого использования, поэтому реализацию перечисления можно скрыть. Если только вы не захотите возвращать объектперечисление с новыми открытыми возможностями, следует скрывать тип объекта, чтобы оставить для себя возможность изменить егореализацию по своему усмотрению.12.4. Класс VectorКласс Vector предназначен для работы с массивом переменного размера, состоящим из элементов Object.

Новые элементы могут добавляться вначало, середину или конец вектора, и к любому элементу можно обратиться посредством индекса. Массивы в языке Java имеют фиксированныйразмер, так что объекты Vector оказываются полезными в тех случаях, когда в момент создания массива неизвестно максимальное количествосохраняемых элементов или это количество велико, а достигается оно редко.Методы класса Vector делятся на три категории:●●●Методы для модификации вектора.Методы для получения объектов, хранящихся в векторе.Методы, управляющие процессом расширения вектора, когда его емкости оказывается недостаточно.Безаргументный конструктор создает объект Vector, размер которого регулируется в соответствии с принятыми по умолчанию правилами.Другие конструкторы рассматриваются ниже, вместе с методами управления размером вектора.Многие методы класса изменяют содержимое вектора.

Все они, кроме setElements, при необходимости осуществляют динамическое изменениеразмера вектора в соответствии со своими потребностями.public final synchronized void setElementAt(Object obj, int index)Присваивает obj элементу вектора с индексом index. Старое значение этого элемента пропадает. При задании индекса, превышающего текущийразмер вектора, возбуждается исключение IndexOutOfBoundsException. Чтобы убедиться в корректности индекса перед его применением,используйте метод setSize (см. ниже).public final synchronized void removeElementAt(Object obj, int index)Удаляет элемент вектора с индексом index. Элементы, находящиеся после удаленного, сдвигаются к началу, а размер вектора уменьшается на 1.public final synchronized void insertElementAt(Object obj, int index)Вставляет элемент obj в позицию index.

Элементы, следующие после удаленного, сдвигаются, чтобы освободить место для вставки.public final synchronized void addElement(Object obj)Добавляет элемент obj к концу вектора.public final synchronized boolean removeElement(Object obj)Эквивалентен методу indexOf(obj) и — в случае удачного поиска — вызову removeElementAt для найденного индекса. Если объект не являетсяэлементом вектора, removeElement возвращает false (метод indexOf описывается ниже).public final synchronized void removeAllElements()Удаляет все элементы вектора. Вектор становится пустым.Класс Polygon предназначен для хранения списка объектов Point, которые представляют собой вершины многоугольника:import java.util.Vector;public class Polygon {private Vector vertices = new Vector();public void add(Point p) {vertices.addElements(p);}public void remove(Point p) {vertices.

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

Тип файла
PDF-файл
Размер
1,1 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6376
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее