Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 169
Текст из файла (страница 169)
Целевой массив должен быть одномерным и со- вместимым по типу с элементами коллекции Заключает коллекцию а г в оболочку типа лггау11як с фиксированным размером и возвращает результзт Возвращает часть вызывающей коллекции типа )(гге уъгя г. Часть возвращаемой коллекции начинается с элемента, указываемого по индексу 1бх, и включает ко- личество элементов, определяемое параметром осипа, Возвращаемый обьект ссылается на те же апементы, что и вызывающий объект Возвращает индекс первого вхождения объекта т в вы- зывающей коллекции. Если искомый объект не обнаружен, возвращает значение -1 Вставляет элементы коллекции с в вызывающую кол- лекцию, начиная с элемента, указываемого по индексу ясегг1бх Возвращает индекс последнего вхождения обьекта ч в вы- зывающей коллекции. Если искомый объект не обнаружен, метод возвращает значение -1 Заключает коллекцию в г в оболочку типа лггау11яс, Да- ступную только для чтения, и возвращает результат Удаляет часть вызывающей коллекции, начиная с элемента, указываемого по индексу г бх, и втлючая количество апе- ментов, определяемое параметром осипа Располагает элементы вызывающей коллекции в обратном порядке Располагает в обратном порядке часть вызывающей кол- лекции, начиная с элемента, указываемого по индексу эбх, и включая количество элементов, определяемое параме- тром ссипс Заменяет часть вызывающей коллекции, начиная с элемен- та, указываемого по индексу 1 с ю элементами коллекции с Сортирует вызывающую коллекцию по нарастающей Сортирует вызывающую коллекцию, используя для срав- нения указанный метод совр.
Если параметр совр имеет пустое значение, то для сравнения используется метод, вы- бираемый по умолчанию Сортирует вызывающую коллекцию, используя дпя сравне- ния указанный метод совр. Сортировка начинается с эле- мента, указываемого по индексу ягягггбх, и втпючавт количество элементов, определяемых па(вметром осипа. Если параметр совр имеет пустое значение, то дпя срав- нения используется метод, выбираемый по умолчанию Глава 24. Коллекции, перечислнтели н нтераторы 847 Окончание таба.
24.4 Описание риЫ1с эгагас Аггаупвэг зуиснгопагеб(йггауъуэг Тазг) Возвращает синхронизированный вариант коллекции типа Аггаугцэс, передаваемой в качествепараметра 11эс риЫТс и1ггиа1 оЬ)есг() тоАггау( ) Возвращает массив, содержащий копии элементов вызы- вающего обьекта риЫТс иуггиа1 Актау Тохггау(Туре Суре) Возвращает массив, содержащий копии элементов вызы- вающего обьекта. Тип элементов этого массива определя- ется параметром суре риЫ1с иакгиа1 иоан ТггвТозгле () устанавливает значение сводима сэрэсгсу равным значе- нию свойства соипс риЫТс чг1гсиа1 гпг Сарас1су ( Чека эег; Свойство сарасбсу позволяет получать и устанавливать емкость вызывающей коллекции типа Аггау11зс.
Емкость обозначает количество элементов, которые может содержать коллекция типа Актау(.1эг до ее вынужденного расширения. Как упоминалось выше, коллекция типа Актау),1зс расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если количество элементов коллекции известно заранее.
Благодаря этому исключаются издержки на выделение дополнительной памяти. С другой стороны, если требуется сократить размер базового массива коллекции типа АггауА1зг, то для этой цели достаточно установить меньшее значение свойства сарас1су. Но это значение не должно быль меньше значения свойства соиле. Напомним, что свойство Соипг определено в интерфейсе 1Со11есг1оп и содержит количество объектов, хранящихся в коллекции на данный момент. Всякая попытка установить значение свойства Сарасагу меньше значения свойства Соиле приводит к генерированию исключения АгчзипепсОисОГВапоекхсерс1оп. Поэтому для получения такого количества элементов коллекции типа АггауА1зс, которое содержится в ней на данный момент, следует установить значение свойства Сарас1СУ равным значению свойства Соиле. Для этой цели можно также вызвать метод Тг1пто51ге () .
В приведенном ниже примере программы демонстрируется применение класса Актау(,1эс. В ней сначала создается коллекция типа Аггаунбэс, а затем в эту коллекцию вводятся символы, после чего содержимое коллекции отображается. Некоторые элементы затем удаляются из коллекции, и ее содержимое отображается вновь. После этого В классе Аггауп1зг поддерживается также ряд методов, оперирующих ЭлЕмеНтами коллекции в заданных пределах. Так, в одну коллекцию типа Аггауь1эс можно вставить другую коллекцию, вызвав метод 1пэеггпаппе () . Для удаления из коллекции элементов в заданных пределах достаточно вызвать метод Петоиенапие () .
А для перезаписи элементов коллекции типа Аггаунаэг в заданных пределах элементами из другой коллекции служит метод 5егпапое () . И наконец, элементы коллекции можно сортировать или искать в заданных пределах, а не во всей коллекции. По умолчанию коллекция типа Аггау11эг НЕ СИНХРонизиРована, Для получения синхронизированной оболочки, в которую заключается коллекция, вызывается метод 5упснгоп1хес((). В классе Аггауъ1зг имеется также приведенное ниже свойство Сарасбгу, помимо свойств, определенных в интерфейсах, которые в нем реализуются. 848 Часть П. Библиотека Са в коллекцию вводятся дополнительные элементы, что вынуждает увеличить ее емкость И наконец, содержимое элементов коллекции изменяется.
// Продемонстрировать применение класса Аггауьаяс. цяапо зуясещ) ця1пч зуясещ.Со11ессаопят с1аяя йггауь1яспещо ( ясас1с гоаб Магд() ( // Создать коллекцию в виде динамического массива. Аггауьаяс а1 = печ Аггауваяс()) Сопяо1е.нгасе11пе("Исходное количество элементов: " т а1.Соцпг)т Сопяо1е.нгасеЬЕпе()т Сопяо1е.нгасепьпе("Добавить б элементов"); // Добавить элементы в динамический массив. а1.АсЫ ('С')т а1.АсЫ ('й'); а1.АсЫ ('К')т а1.АсЫ ('В')' а1.АсЫ ('Р')т а1.АсЫ ('У')' Сопзо1е.нгааеьгпе("Количество элементов: " + а1.Соцпс)т // Отобразить содержимое динамического массива, // используя индексирование массива. Сопзо1е.Итаке("Текущее содержимое: ")т еог(1пс 1=от 1 < а1.соцпс) 1++) Сопяо1е.иг1се(а1(1! + " "); Сопяо1е.нг1геьгпе("1п")т Сопяо1е.нгггаеь1пе("Удалить 2 элемента"); // Удалить элементы иэ динамического массива.
а1.кещоче ('Ь') т а1.вещоче('А')т Сопяо1е.нгасецапе("Количество элементов: " + а1.Соцпс) // Отобразить содержимое динамического массива, // используя цикл Еогеасв. Сопяо1е.Итаке("Содержимоес "); Еогеась(сваг с 1п а1) Сопяо1е.иг1се(с + " ")т Сопяо1е.нг1сеь1пе("1п")т Сопяо1е.нгагевапе("Добавить еще 20 элементов"); // Добавить количество элементов, достаточное для // принудительного расширения массива. Еог(апс 1=от 1 < 20т 1++) а1.А<Ы ((сваг)('а' + 1))) Глава 24. Коллекции, перечислители и итервторы 849 Сопяо1е.йг1сеь1пе("Текущая емкость: а1.сарасвгу); Сопяо1е.йгвсетепе("Количество элементов после " + "добавления 20 новых: " + а1.Соцпс)т Сопяо1е.йг1се("Содержимоет ")т Тогеасп(спас с Тп а1) Сопяо1е.йг1ге(с + " ")т Сопяо1е.йг1геь1пе("1п")) // Изменить содержимое динамического массива, О используя индексирование массива. Сопяо1е.йг1геьепе("Изменить три первых элемента"); а1[0) = 'Х'; а1[1) = 'У': а1[2) = 'Е'; Сопяо1е.Иг1се("Содержимое: ")т богеасп(спас с 1п а1) Сопяо1е.йг).ге(с + " ")' Сопяо1е.йг1сеьгпе()) ) ) Вот к какому результату приводит выполнение этой программы: Исходное количество элементов: 0 Добавить б элементов Количество элементов: б Текущее содержимое: С А Е В О Г Удалить 2 элемента Количество элементов.
"4 Содержимое: С Е В О Добавить еще 20 элементов Текущая емкость: 32 Количество элементов после добавления 20 новых: 24 Содержимое: С Е В О а Ь с б е Т 0 Ь 1 2 Л 1 ю и о р Ч г я Г Изменить три первых элемента Содержимое: Х У 2 О а Ь с б е Т 0 Ь 1 1 )т 1 щ и о р Ч г я Г Сортировка и поиск в коллекции типа лккауК.хве Коллекцию типа йггауОТяс можно отсортировать с помощью метода Богс () .
В этом случае поиск в отсортированной коллекции с помощью метода Е1пагуэеагсЬ () становится еще более эффективным. Применение обоих методов демонстрируется в приведенном ниже примере программы. // Отсортировать коллекцию типа Аггаугпяг и осуществить в ней поиск. цягпд Бувсею) цяапч Буягею.Со11есг1опят 850 Часть П. Библиотека С8 с1аэв Яогсзеагснпеюо ( эсагъс чогб Мазп() ( // Создать коллекцию в виде динамического массива. Аггауътэс а1 = пен Аггауцьэг()) // Добавить элементы в динамический массив.
а1,АсЫ (55)) а1.АсЫ(43) т а1. АсЫ (-4) т а1.АсЫ (88) т а1.АсЫ(3) ' а1.АсЫ (19)т Сопзо1е.игьсе("Исходное содержимоес ")т тогеасн(апс 1 1п а1) Сопво1е.игъге 81 + " ")т сопво1е. Игьгеъапе ("1п" ) т // Отсортировать динамический массив. а1. Яогс Н ) // Отобразить содержимое динамического массива, // используя цикл тогеасп. Сопво1е.нг1се("Содержимое после сортировки: ")т тогеась(1пс 1 ьп а1) Сопво1е.иггге(1 ь " "); сопво1е.иг1гепьпе("1п")т Сопво1е.кгзсеь1пе("Индекс элемента 43: а1.81пагузеагсн(43))т ) ) Ниже приведен результат выполнения этой программы. Исходное содержимое: 55 43 -4 88 3 19 Содержимое после сортировкис -4 3 19 43 55 88 Инлекс элемента 43: 3 В одной и той же коллекции типа Аггаувазг могут храниться объекты любого типа.
Тем ие менее во время сортировки и поиска в ией зти объекты приходится сравнивать. Так, если бы список объектов в приведенном выше примере программы содержал символьную строку, то их сравнение привело бы к исключительной ситуации. Впрочем, для сравнения символьных строк и целых чисел можно создать специальные методы. О таких методах сравнения речь пойдет далее в этой главе. Получение массива иа коллекции типа лхтауьхвй В работе с коллекцией типа Агга у11з с иногда требуется получить из ее содержимого обычиый массив. Этой цели служит метод тойггау () . Для преобразования коллекции в массив имеется несколько причин.
Две из иих таковьс потребность в ускорении обработки при выполнении некоторых операций и необходимость передавать массив методу, который ие перегружается, чтобы принять коллекцикь Но независимо от конкретной причины коллекция типа Аггауь1ЯС преобразуется в обычный массив довольно просто, как показано в приведенном ниже примере программы. Глава 24. Коллекции, леречислители и итераторы 861 // Преобразовать коллекцию типа Аггауььяг в обычный массив.