Lecture11 (1133568), страница 7
Текст из файла (страница 7)
Все ониреализуют интерфейс последовательностейсимволов CharSequence.Класс String представляет неизменяемыестроки, два других класса — изменяемые.Отличаются они тем, что все операцииStringBuffer синхронизованы, а операцииStringBuilder — нет. Соответственно, первыйкласс нужно использовать для представлениястрок, с которыми могут работать несколькопотоков, а второй — для повышенияпроизводительности в рамках одного потока.В пакете java.lang находятся классы-оберткипримитивных типов Boolean, Byte, Character,Short, Integer, Long, Float, Double.Все числовые классы наследуют классуjava.lang.Number.Эти классы содержат константы,представляющие крайние значениясоответствующих типов, методы дляпреобразования значений соответствующихтипов в строку и для получения этих значенийиз строк, а также методы для работы с битовымпредставлением значений числовых типов.Для форматированного представления чиселиспользуются классы java.text.NumberFormatи java.text.DecimalFormat.Набор математических функций и константреализован в виде элементов классаjava.lang.Math.Для генерации псевдослучайных чисел можноиспользовать как метод Math.random(), так иобладающий большей функциональностьюкласс java.util.Random.Для более сложных вычислений можноиспользовать классы пакета java.math —BigInteger и BigDecimal, представляющиеДля работы со строками используются классыSystem.String, представляющий неизменяемыестроки, и System.Text.StringBuilder,представляющий изменяемые строки.Обертками примитивных типов C# служатследующие структурные типы из пространстваимен System.Boolean, Byte, SByte, Int16, Int32, Int64,UInt16, UInt32, UInt64, Single, Double,Decimal.Они также содержат аналогичные константы иметоды.Для работы с форматированным строковымпредставлением чисел используются методыParse() и ToString() тех же классов сдополнительными параметрами, реализующимиинтерфейс IFormatProvider.
Чаще всего этообъекты класса System.Globalization.NumberFormatInfo.Набор математических функций и константреализован в виде элементов классаSystem.Math.Для генерации псевдослучайных чиселиспользуется класс System.Random.целые числа произвольной величины идесятичные дроби произвольной точности.java.lang.Thread — класс, объекты которогопредставляют потоки в Java машине.Он содержит методы, позволяющие прерватьожидание данным потоком синхронизационнойоперации (interrupt()), подождать концаработы данного потока (join()), запуститьпоток (start()), приостановить выполнениетекущего потока на какое-то время (sleep()),получить текущий поток (currentThread()), атакже получить различные характеристикиданного потока (приоритет, имя, и пр.).Класс java.lang.ThreadLocal служит дляхранения значений, которые должны бытьспецифичны для потока.
Т.е. значение,получаемое методом get() из объекта этогокласса, — то самое, которое текущий потоксохранил ранее с помощью метода set().В пакете java.lang находится и набор наиболееважных интерфейсов.CharSequence — интерфейспоследовательности символов.Cloneable — маркирующий интерфейсобъектов, для которых можно строить копии.Сам по себе он не требует реализации какихлибо методов, хотя для построения копийнужно перегрузить метод clone(), а лишьпозволяет использовать функциональностьэтого метода в классе Object.Iterable<T> — интерфейс итерируемыхколлекций. Объекты, реализующие этотинтерфейс, могут, наравне с массивами,использоваться в инструкции цикла поколлекции.Comparable<T> — интерфейс, реализуемыйклассами, объекты которых линейноупорядочены, т.е.
любые два объекта этогокласса сравнимы по отношению«больше/меньше». Используется, например, дляреализации коллекций с быстрым поиском.В пакете java.lang также находится рядклассов, объекты которых представляютэлементы самого языка — Class<T>,представляющий классы, Enum<T>,представляющий перечислимые типы, иPackage, представляющий пакеты.Все эти классы, а также классы, находящиеся впакете java.lang.reflect (Field, Method,Классом, представляющим потоки .NET в C#,является System.Threading.Thread.Текущий поток может быть получен с помощьюего свойства CurrentThread.Этот класс тоже содержит методы Interrupt(),Join(), Start(), Sleep() и др.Аналогичные интерфейсы в C# следующие.System.ICloneable — требует реализацииметода Clone() для создания копий.System.Collections.IEnumerable,System.Collections.Generic.IEnumerable<T> — интерфейсы итерируемыхколлекций.System.IComparable, System.IComparable<T>— интерфейсы типов, объекты которыхлинейно упорядочены.В C#, в отличии от Java, где шаблонные типывсегда имеют и непривязанный к типамаргументам интерфейс, шаблоны стипизированным интерфейсом простодобавляются в библиотеки к ужесуществовавшим там до появления C# 2.0нетипизированным классам и интерфейсам.Для C# аналогичную роль в механизмерефлексии играют классы System.Type,System.ValueType, System.Enum и классы,входящие в пространство именSystem.Reflection — MemberInfo, MethodInfo,FieldInfo, и т.д.Constructor) используются в рамкахмеханизма рефлексии (reflection) для доступа кинформации об элементах языка во времявыполнения программы.
На механизмерефлексии построены очень многие среды итехнологии, входящие в платформу Java,например JavaBeans.Для анализа структуры и элементов массивов вовремя работы программы можно использоватьметоды класса java.lang.reflect.Array,позволяющие определить тип элементовмассива, получить их значения, создавать новыемассивы и пр.Для манипуляций с массивами — поиска,сортировки, сравнения и пр. — используютсяметоды класса java.util.Arrays.Аналогом обоих классов Java для работы смассивами служит класс System.Array.Он содержит как методы анализа структурымассива, так и операции для поиска,упорядочения, копирования и сравнениямассивов.В обоих языках имеются механизмы, позволяющие определять слабые ссылки.
Объект,хранящийся по слабой ссылке, считается сборщиком мусора недоступным по ней и поэтому можетбыть уничтожен при очередном запуске процедуры сборки мусора, если обычных ссылок на негоне осталось.Слабые ссылки удобны для организации хранилищ объектов, которые не должны мешать ихуничтожению, если эти объекты стали недоступны во всех других местах, т.е.
ссылки на нихостались только из такого хранилища.Пакет java.lang.ref содержит классы дляорганизации сложной работы со ссылками.Например, классjava.lang.ref.WeakReference представляетслабые ссылки.Другие классы представляют более хитрыевиды ссылок.Пакет java.util содержит классы иинтерфейсы, представляющие разнообразныеколлекции объектов.Collection<T> — общий интерфейс коллекцийJava.Collections — предоставляет наборобщеупотребительных операций надколлекциями: построение коллекций сразличными свойствами, поиск, упорядочение ипр.Set<T>, HashSet<T>, TreeSet<T> — интерфейсмножества объектов и различные егореализации. TreeSet<T> требует, чтобыобъекты типа T были линейно упорядоченными,и предоставляет быстро работающие (залогарифмическое время от числа объектов вмножестве) функции добавления, удаления ипоиска.Map<K, V>, HashMap<K, V>, TreeMap<K, V> —В C# слабые ссылки реализуются при помощикласса System.WeakReference.Набор интерфейсов и классов коллекций C#находится в пространствах именSystem.Collections иSystem.Collections.Generic.
В первомнаходятся интерфейсы и классынетипизированных коллекций, во втором —шаблоны. Далее упоминаются толькошаблонные типы, если их нетипизированныйаналог называется соответствующим образом.Базовые интерфейсы коллекций —Generic.IEnumerable<T>,Generic.ICollection<T>.Интерфейс отображений и классы,реализующие отображения —Generic.IDictionary<K, V>,Generic.Dictionary<K, V>, Hastable(нетипизированный).Интерфейс и классы списков —Generic.IList<T>, Generic.List<T>,интерфейс ассоциативных массивов илиотображений (maps) и его различныереализации.
TreeMap<K, V> требует, чтобыобъекты-ключи были линейноупорядоченными, и предоставляет быстрыеоперации с отображением.List<T>, ArrayList<T>, LinkedList<T> —интерфейс расширяемого списка и различныеего реализации.BitSet — реализует расширяемый списокфлагов-битов.IdentityHashMap<K, V> реализуетотображение, сравнивающее свои ключи по ихсовпадению, а не с помощью метода equals(),как это делают остальные реализации Map<K,V> (и Set<T>).WeakHashMap<K, V> хранит ключи с помощьюслабых ссылок, что позволяет автоматическиуничтожать хранящиеся в таком отображениипары ключ-значение, если на объект-ключдругих ссылок не осталось.Много полезных классов-коллекций можнонайти вне стандартных библиотек, например, вбиблиотеке Jakarta Commons [12], частиобширного проекта Apache Jakarta Project [13].Для определения линейного порядка наобъектах типа T используется интерфейсjava.util.Comparator<T>.Наиболее часто применяется его реализация длястрок — java.text.Collator, абстрактныйкласс, позволяющий создавать специфическиеобъекты, сравнивающие строки в различныхрежимах, включая игнорирование регистрасимволов, использование национальноспецифических символов и пр.Классы java.util.Calendar,java.util.GregorianCalendar,java.util.Date и java.text.DateFormatиспользуются для работы с датами.Первые два класса используются дляпредставления информации о календаре,объекты класса Date представляют даты имоменты времени, а последний классиспользуется для их конвертации вформатированный текст и обратно.Класса для представления временныхинтервалов в стандартной библиотеке нет.Гораздо более широкий набор средств дляработы с датами и временами предоставляетArrayList (нетипизированный).BitArray — реализует расширяемый списокбитов.Аналогичный интерфейс в C# —System.Collections.Generic.
IComparer<T>.Его реализация для строк — абстрактный классSystem.StringComparer.Для представления различных календарейиспользуются подклассыSystem.Globalization.Calendar, тоженаходящиеся в пространстве именSystem.Globalization.Для представления моментов времени —System.DateType.Для интервалов времени — System.TimeSpan.Для форматированного текстовогопредставления дат и времени —System.Globalization.
DateTimeFormatInfo.библиотека Joda [14].Классы java.util.Timer иjava.util.TimerTask служат выполненияопределенных действий в заданное время иличерез определенное время.Для построения и анализа форматированныхстрок, содержащих данные различных типов,полезен класс java.util.Formatter.С помощью реализации интерфейсаjava.util.Formattable можно определитьразные виды форматирования для объектовпользовательских типов.В пакете java.util есть несколько классов,представляющих регионально- илинационально-специфическую информациюС помощью объектов класса Currencyпредставляют различные валюты.Информация о региональных или национальноспецифических настройках и параметрахпредставляется в виде объектов класса Locale.Набор объектов, имеющих локализованныеварианты, например, строки сообщений наразных языках, может храниться с помощьюподклассов ResourceBundle —ListResiourceBundle,PropertyResourceBundle.Работа с различными кодировками текстаорганизуется при помощи классов пакетаjava.nio.charset.Интерфейс и классы пакета java.utilEventListener, EventListenerProxy,EventObject используются для реализацииобразца «подписчик» в рамках спецификацийJavaBeans (см.