Г. Шилдт - С#4.0 Полное руководство (1160795), страница 189
Текст из файла (страница 189)
Если параметр сотрагег имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию Сортирует вызывающую комекцию, используя для сравнения способ, определяемый параметром сотрагег. Сортировка начинается с элемента, указываемого по индексу Тпнех, и включает количество элементов, определяемых параметром соопс. Если параметр соврагег имеет пустое значение, то для сравнения используется способ, выбираемый по умолчанию ' Возвращает синхронизированный вариант коллекции типа Аггяу11я с, передаваемой в качестве параметра 11яг Возвращает массив, содержащий копии элементов вызывающего объекта Возвращает массив, содержащий копии элементов вызывающего обьекта.
Тип элементов этого массива определяется параметром суре Устанавливает значение свойства сярасссу равным ЗНаЧЕНИЮ СВОйСтВа Соопг роЬ11с чдггоа1 чо1с) Яогг (Тпг Тпс(ех, гпС соипг, Тсоврагег сотрагег) роЫсс ягаС1с Аггаувсяг БупсЛгоп1гес((Аггау11яС 11яг) рцЫТс ч1гсца1 оЬбесс [] ТоАггау() роЬ11с чзггца1 Аггау Тодггау (Туре Суре) роЫ1с ч1гсца1 чо1с) ТгсвтоБ1ге() В классе Аггауссяг поддерживается также ряд методов, оперирующих элементами коллекции в заданных пределах. Так, в одну коллекцию типа Аггау11яС можно вставить другую коллекцию, вызвав метод 1пяеггвапое () . Для удаления из коллекции элементов в заданных пределах достаточно вызвать метод Ревочеяапде () . А для Глава 25.
Коллекции, перечиолители и итераторы 935 перезаписи элементов коллекции типа Аггау11яс в заданных пределах элементами из другой коллекции служит метод Беграпое () . И наконец, элементы коллекции можно сортировать или искать в заданных пределах, а не во всей коллекции. По умолчанию коллекция типа Агха уП1яб не синхронизирована. Для получения синхронизированной оболочки, в которую заключается коллекция, вызывается метод Бупспгоп1гес)().
В классе Аггау) Тяг имеется также приведенное ниже свойство Сарасьсу, помимо свойств, определенных в интерфейсах, которые в нем реализуются. рцЫ1с чьгсца1 лпг сарасгву ( чесг яес; ) Свойство Сара с лбу позволяет получать и устанавливать емкость вызывающей коллекции типа Аггауп1яг. Емкость обозначает количество элементов, которые может содержать коллекция типа Аггаупьяг до ее вынужденного расширения. Как упоминалось выше, коллекция типа АггауЬ1яс расширяется автоматически, и поэтому задавать ее емкость вручную необязательно. Но из соображений эффективности это иногда можно сделать, если количество элементов коллекции известно заранее.
Благодаря этому исключаются издержки на выделение дополнительной памяти. С другой стороны, если требуется сократить размер базового массива коллекции типа АггауЬТя Г, то для этой цели достаточно установить меньшее значение свойства Сараслсу, Но это значение не должно быть меньше значения свойства Соцпг. Напомним, что свойство Соцпг определено в интерфейсе 1Со11есслоп и содержит количество объектов, хранящихся в коллекции на данный момент. Всякая попьпка установить значение свойства Сарас1гу меньше значения свойства Соцпс приводит к генерированию исключения Аго цюепгОцСОТАапдекхсерслоп. Поэтому для получения такого количества элементов коллекции типа Аггау11я г, которое содержится в ней на данный момент, следует установить значение свойства Сараслсу равным значению свойства Соцпс.
Для этой цели можно также вызвать метод Тг1гптоБ1 те ( ) . В приведенном ниже примере программы демонстрируется применение класса Аггау( Тяс. В ней сначала создается коллекция типа АггауЫ яс, а затем в эту коллекцию вводятся символы, после чего содержимое коллекции отображается.
Некоторые элементы затем удаляются из коллекции, и ее содержимое отображается вновь. После этого в коллекцию вводятся дополнительные элементы, что вынуждает увеличить ее емкость. И наконец, содержимое элементов коллекции изменяется. О продемонстрировать применение класса АггауЬ1яг. цятпд Буягеи; цяьпэ Буясега.Со11есслопя; с1аяя АггауЬ1ясоеюо ( ясаслс чогб Ма1п() // Соэпать коллекцию в виде динамического массива. Аггауьляс а1 = пен Аггаувьяс(); Сопво1е.нг1севвпе("Исходное количество элементов: " + а1.соцпс) Сопяо1е.нгтсеььпе (); Сопяо1е.нггсеввпе(тйобавить б элементов"); О добавить элементы в динамический массив.
а1.лсЫ('С'); 93б Часть П. Бибаиетека СМ а1 . Асс( ( ' А ' ); а1.АсЫ('Е')( а1.Ас(б('В')) а1.Ас)б('0'): а1.АсЫ ( Е'); Сопво1е.игьсеЬвпе("Количество элементов: " + а1.Сопла); О Отобразить солержимое динамического массива, // используя индексирование массива. Сопзо1е.игтсе("Текущее содержимое: Тог(гпг 1=0; 1 < а1.соцпг; 1+т) Сопао1е.игтсе(а1[1) + " ")' Сопво1е.иггге11пе ("1п") ) Сопво1е.игтсевьпе("Удалить 2 элемента")~ // удалить элементы из динамического массива.
а1.аешоче('Г'); а1.йешоче('А']; Сопво1е.игтсеььпе("Количество элементов: " + а1.СоцпС); // Отобразить содержимое динамического массива, используя цикл ТогеасЬ. сопао1е.игьге("содержимое: ")) йогеасЬ(сваг с Тп а1) сопао1е.иг1ге(с + " Сопзо1е.игтсевгпе("1п"); Сопво1е.иг1гевьпе("Добавить еще 20 элементов"); О )(сбавить количество элементов, достаточное для принудительного расширения массива. йог(ьпс 1=0; 1 < 20; а1.Ас)б((сваг)('а' + ).)); сопво1е.хгтсехтпе("текущая емкость: " + а1.сарас1гу)! Сопзо1е.иг1гевапе("Количество элементов после добавления 20 новых." а1.Соцпс); Сопво1е.иг1се("Содержимое.
""); ГогеасЬ(сваг с 1п а1) Сопво1е.Иг1се(с + " "); Сопзо1е.иг1сеь1пе("1п"); // Изменить содержимое динамического массива, О используя индексирование массива, Сопзо1е.игьсевьпе("Изменить три первых элемента"); а1(0) = 'Х'; а1(1) а1(2) = '2'; сопво1е.хгьге("Содержимое: "); йогеасЬ(сваг с Тп а1) Сопво1е.игтсе(с + " Сопво1е.Хггвевапе (); Глава 25. Комекции, перечислители и итераторы 937 Вот к какому результату приводит выполнение этой программы.
Исходное количество элементов: 0 Добавить б элементов Количество элементов: б текущее содержмое: с А Б в О у удалить 2 элемента Количество элементов: 4 Содержимое: С Б В О Добавить еще 20 элементов Текущая емкость: 32 Количество элементов лосле добавления 20 новых: 24 Содержимое: С Я П О а Ь с б е Г 9 Ь 1 3 К 1 щ л о р Ч г я Г Изменить три первых элемента Содержимое: Х У Б О а Ь с С е г 9 Ь г 3 К 1 щ л о р Ч г я Сортировка и поиск в комекции типа АггауЫвв Коллекцию типа АггауЬ1БЬ можно отсортировать с помощью метода Богб () .
В этом случае поиск в отсортированной коллекции с помощью метода В г ла ту эеа гсЬ ( ) становится еще более эффективным. Применение обоих методов демонстрируется в приведенном ниже примере программы. // Отсортировать коллекцию типа АггауЬгяс и осуществить в ней поиск. цяглэ Буяяекц цзьоэ Буясещ.со11ессьоля; сгаяя Боггзеагспоелю ( ягаггс тоти Магд() ( // Создать коллекцию в виде динамического массива. АггауЬьяо а1 = лен АггауЬ1яг()г // Добавить элементы в динамический массив. а1.лсЫ(55) г а1.Ас)с1 (43) Г а 1 . Ас)б (-4); а1.Або(88); а1.Ас)б(3); а1.Ас(С(19)Г Соляо1е.иггсе("Исходное содержимое: "); Гогеасп(1лс г 1л а1) Соляо1е.нггяе(1 т " ")," Соояо1е,иг1гепгле(ГКл")г // Отсортировать динамический массив.
а1. Бого () г // Отобразить содержимое динамического массива, используя цикл Гогеась. 938 Часть П. библиотека С(г Сопяо1е.игьсе("Содержимое после сортировки: "); Гогеасн (1пс г 1п а1) Сопяо1е.Хггсе(г т " "): сопяо1е.хгггеьгпе("1п")4 Сопяо1е.игьсеъ1пе("Индекс элемента 43: а1.81пагузеагсн(43))4 ) Ниже приведен результат выполнения этой программы. Исходное содержимое: 55 43 -4 88 3 19 Содержимое после сортировки: -4 3 19 43 55 88 Индекс элемента 43: 3 В одной и той же коллекции типа Аггаупсяс могут храниться объекты любого типа. Тем не менее во время сортировки и поиска в ней эти объекты приходится сравнивать. Так, если бы список объектов в приведенном выше примере программы содержал символьную строку, то их сравнение привело бы к исключительной ситуации.
Впрочем, для сравнения символьных строк и целых чисел можно создать специальные методы. О таких методах сравнения речь пойдет далее в этой главе. Получение массива из коллекции типа Аггауг 1ак В работе с коллекцией типа АггауП1яб иногда требуется получить из ее содержимого обычный массив. Этой цели служит метод тойггау ( ) . Для преобразования коллекции в массив имеется несколько причин. Две из них таковы: потребность в ускорении обработки при выполнении некоторых операций и необходимость передавать массив методу, который не перегружается, чтобы принять коллекцию.
Но независимо от конкретной причины коллекция типа Агга уцс я с преобразуется в обычный массив довольно просто, как показано в приведенном ниже примере программы. // Преобраэояать коллекцию типа Аггауъ1яс а обычный массив. оя1пс зуясею; ця1пс зуясею.со11есг1опя4 с1аяя Аггауь1ястолггау ( ягаггс тога ма1п() ( Аггауъ1яс а1 = пен Аггауъьяс (); О Добавить элементы я динамический массив. а1.АсЫ(1); а1.АсЫ(2) 4 а1.лес(3): а1.лоЫ (4) ( Сопяо1е.игьсе("Содержимое: "); Гогеасб(лпс 1 гп а1) Сопяо1е.иг1ге(г + " "); Сопяо1е.игггеъ1пе()4 Получить массив. Глава 25. )(омвкции, перечислигели и игвраторы 939 1пс() ьа = (ьпс() ) а1.тоьггау(суреог(ьпс) ); 1пс яшп = Ог Просуммировать элементы массива. Гог(гпг х=о; 1<1а.ьепстпг янм += зга(1) г Сопяо1е.игьгеъ1пе("Сумма равна: " + япм) Эта программа дает следующий результат.