Г. Шилдт - С#4.0 Полное руководство (1160795), страница 200
Текст из файла (страница 200)
Порядок следования элементов во множестве не указывается. В классе НаяЬБег<Т> определяется полный набор операций с множеством, определенных в интерфейсе 13ег<Т>, включая пересечение, объединение и разноименносгь. Благодаря этому класс наяьвес<т> оказывается идеальным средством для работы с множествами Объектов, когда порядок расположения элементов во множестве особого значения не имеет. Коллекция типа Глава 2Б. ((оллекции, перечислители и итвраторы 981 НавЬБеС<Т> имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. Ниже перечислены наиболее употребительные конструкторы, определенные в классе НавЬЯес<т>.
рнЫ1с НавЬЯег() рнЫгс НаяЬяег(1ЕпниегаЬ1е<т> сп11есг1пп) рнЫгс НаяЬБег(1ЕЧпа11Суспираге сеирагег) рнЫ1с Наяивег (1ЕпниегаЫе<Т> сп11есггеп, 1ЕЧна11Суспираге спирагег) В первой форме конструктора создается пустое множество, а во второй форме— множество, состоящее из элементов указываемой коллекции со21есглоп. В третьей форме конструктора допускается указывать способ сравнения с помощью параметра сотрагег. А в четвертой форме создается множество, состоящее из элементов указываемой коллекции со11есг1оп, и используется заданный способ сравнения соирагег; Имеется также пятая форма конструктора данного класса, в которой допускается инициализировать множество последовательно упорядоченными данными.
В классе наяьБес<т> реализуется интерфейс 15ес<т>, а следовательно, в нем предоставляется полный набор операций со множествами. В этом классе предоставляется также метод КепсочеНЬеге (), удаляющий из множества элементы, не удовлетворяющие заданному условию, или предикату. Помимо свойств, определенных в интерфейсах, которые реализуются в классе НаяЬБеС<Т>, в него введено дополнительное свойство Сопсрагег, приведенное ниже. рпЬ1гс 1ЕЧпа11суСпирагег<Т> Спирагег ( Чегс ) Оно позволяет получать метод сравнения для вызывающего хеш-множества. Ниже приведен конкретный пример применения класса НаяЬБеС<Т>.
с'у продемонстрировать применение класса наяьяес<т>. пя1пд Яувсекн пасло Буягеи.со11есС1ппя.оепег1с! с1аяя НаяЬБегоеео ( ягаггс чо1д ЯЬои(ягггпо ияо, НаяЬЯеС<сЬаг> яеС) ( СЕПЯО1Е.ИГ1СЕ (ИЯБ) 1 ГогеасЬ(сЬаг сЬ 1п яес) Сппяо1е.иг1Се(сЬ + " ") Сопяо1е.нгсгеььПЕ() Г ) ягаггс чогд Маги () ( НаяЬЯеС<сЬаг> яеСА = пеи НаяЬЯеС<сЬаг>()) НавЬБег<сЬаг> яесВ = пен НаяЬЯеС<сЬаг>(); яеСА.Адд('А'); яеСА.Адд('В'); яеСА.Адд('С'); яеСВ.Аед('С')Г веСВ.Адд('О'); 982 Часть 11. Библиотека С(т Бегв.лг)В('Е'); Япон("Исходное содержимое множества Беол: ", БеГА)г Япон("Исходное содержимое множества БеСВ: ", БеСВ); БЕСА.
Я)азиест1ссхсерСИ1ГЬ (БЕГВ) г япон("содерж>зное множества ветл после " т "разноименности со мнояеством Бега: ", БеСА); БЕГА.Опгопнгсп(зеСВ)г Япон("Содержимое множества БетА после " + "объединения со множеством ЯеСВ: ", Бегл)) Беол.кхсерпнгпп(ББСВ)г Япон("Содержимое множества Бегл после " "вычитания из множества БеСВ: ", Бесл); Сопзо1е.нг1геъьпе(); Ниже приведен результат выполнения программы из данного примера. Исходное содержимое множества ветл: А В С исходное содержимое множества Бесе: С О е Содержимое множества БЕСА после разнонменности со множеством ЯеСВ: А В О Е Содержимое множества Бегл после объединения со множеством Яесэ".
А В О Е С Содержимое множества Беол после вычитания из множества БеСВ: А В КлассЗоксеЖес<т> Класс Боггес)эеб<Т> представляет собой новую разновидность коллекции, введенную в версию 4.0 среды .)Х)ЕТ Ргатетчог)с. В нем поддерживается коллекция, реализующая отсортированное множество. В классе Яогсес(эес<т> реализуются интерфейсы 1Бег<Т>, 1Со11есбсоп, 1СО11есг1ос<Т>, 1ЕппыегаЬ1е, 1ЕпптегаЫе<Т>, 1Бегга11ваЫе, а также 1Оезегса11загсопСа11Ьасх. В коллекции типа яогсес(Бес<т> реализуется множество, все элементы которого являются уникальными.
Иными словами, дубликаты в таком множестве не допускаются. В классе Боггес(Бег<Т> определяется полный набор операций с множеспюм, определенных в интерфейсе 1Яеб<Т>, включая пересечение, объединение и разноименносгь. Благодаря тому что все элементы коллекции типа яоггег)Бег <Т> сохраняются в отсортированном порядке, класс Яогбес(эег<Т> оказывается идеальным средством для работы с отсортированными множествами объектов. Коллекция типа Боггег(яеб<Т> имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться. Ниже перечислены четыре наиболее часто используемые конструктора, определенных в классе Богбег)Беб<Т>.
роЬ11с Яотсебзес() роЫ1с яоттес)яет (1ЕповегаЫе<т> со11ессгол) роЫТс Яогтебзег (тсоирагет соирагег) роЫьс Яоттеозег (1ЕпипетаЫе<т> со11ессзол, 1Сопрагег сотрагег) Глава 25. Комекции, перечислители и итераторы 983 В первой форме конструктора создается пустое множество, а во второй форме— множество, состоящее из элементов указываемой коллекции со11ессуоп.
В третьей форме конструктора допускается указывать способ сравнения с помощью параметра соглрагег. А в четвертой форме создается множество, состоящее из элементов указываемой коллекции со11ес Гуоп, и используется заданный способ сравнения соырагег. Имеется также пятая форма конструктора данного класса, в которой допускается инициализировать множество последовательно упорядоченными данными. В классе Боггес(Бес<т> реализуется интерфейс 1Бег<т>, а следовательно, в нем предоставляется полный набор операций со множествами. В этом классе предоставляется также метод Бег 11енВегнееп (), возвращающий часть множества в форме объекта типа Боггес(аег<т>, метод неглсоеипеге (), удаляющий из множества элементы, не удовлетворяющие заданному условию, или предикату, а также метод Нечет ее ( ), возвращающий объект типа 1ЕпсыегаЫе<Т>, который циклически проходит множество в обратном порядке.
Помимо свойств, определенных в интерфейсах, которые реализуются в классе Богсес(аес<Т>, в него введены дополнительные свойства, приведенные ниже. роп1гс тсотрагег<Т> Соирагег ( Сеш роЫ1с Т Нах ( Бес; роЫгс Т Мьп ( Бес; Параллельные коллекции В версию 4.0 среды .НЕТ Ргатетчог)с добавлено новое пространство имен Бузгеы. Со11есг1опз . Сопспггепг. Оно содержит коллекции, которые являются потокобезопасными и специально предназначены для параллельного программирования. Это означает, что они могут безопасно использоваться в многопоточной программе, где возможен одновременный доступ к коллекции со стороны двух или больше параллельно исполняемых потоков.
Ниже перечислены классы параллельных коллекций. Параллельная комекция Описание В1оск1ппСо11есс1оп<Т> Предоставляет оболочку для блокирующей реализации интер- фейса 1Ргсг(псегСопзщвегСо11есг1оп<т> Обеспечивает неупорядоченную реализацию интерфейса 1ргос(псегСопзпвтегСо11есс1оп<Т>, которая оказыва- ется наиболее пригодной в том случае, когда информация вы- рабатывается и потребляется в одном потоке Сохраняет пары "ключ-значение", а значит, реализует парал- лельный словарь Реализует парамельную очередь и соответствующий вариант интерфейса 1ргос(ссегсопзиыегсс11есг1оп<т> Реализует парамельный стек и соответствующий вариант ин- тер ейса 1 гог(ссегСопзсвтегСо11есс1оп<Т> Сопссггепсвап<Т> СопспггепГРТссгопагу <ТКеу, Туа1ие> СопсцггепСОпесе<Т> Сопсцггепгэгаск<Т> Свойство Соптра ге г получает способ сравнения для вызывающего множества. Свойство мах получает наибольшее значение во множестве, а свойство м1п — наименьшее значение во множестве.
В качестве примера применения класса Богсес(вес<Т> на практике просто замените обозначение нав)тэес на Боггес(Бег в исходном коде программы из предыдущего подраздела, посвященного коллекциям типа Наз)тБес<Т>. 984 Часть 1).
Библиотека С№ Как видите, в нескольких классах параллельных коллекций реализуется интерфейс 1ргобисегсопяивегсо11есьаоп. Этот интерфейс также определен в пространстве имен Вуясев. Со11есс1опя. Сопсиггеос. Он служит в качестве расширения интерфейсов 1ЕпивегаЬ1е, 1ЕпивегаЬ1е<Т> и 1Со11есс1оп. Кроме того, в нем определены методы Тгудбб () и ТгуТаКе (), поддерживающие шаблон "поставщик- потребитель". (Классический шаблон "поставщик-потребитель" отличается решением двух задач.
Первая задача производит элементы коллекции, а другая потребляет их.) Метод Тгу)(бб () пытается добавить элемент в коллекцию, а метод ТгуТахе () — удалить элемент из коллекции. Ниже приведены формы объявления обоих методов. Ьоо1 Тгуябб(Т 1сев) Ьоо1 ТгуТахе(оис Т ТГев) риЫ1с риЫгс риЫ1с риЫТс В1осК1пдоо11ессгоп() В1исхьпдои11есс1оп (Тпс Ьоипбебоарасз Гу) В1осхьпдсо11есггдп(1Ргобисегсопявпегсо11есгьоп<т> со11есгбоп) В1осхьпдоо11ессгоп(1Ргобисегсопяивегоо11есс1оп<Т> са11есг1оп, 1пс Ьоипбебяарасбсу) В двух первых конструкторах в оболочку класса В1оскапдса11есг1оп<т> заключается коллекция, являющаяся экземпляром объекта типа Сопсиггепг()иеие<Т>. А в двух других конструкторах можно указать коллекцию, которая должна быть положена в основу коллекции типа В1осКТпдСо11есгьоп<Т>.