Читаем C# 4.0: полное руководство полностью

В классе HashSet поддерживается коллекция, реализующая множество. Для хранения элементов этого множества в нем используется хеш-таблица. В классе HashSet реализуются интерфейсы ICollection, ISet, IEnumerable, IEnumerable, ISerializable, а также IDeserializationCallback. В коллекции типа HashSet реализуется множество, все элементы которого являются уникальными. Иными словами, дубликаты в таком множестве не допускаются. Порядок следования элементов во множестве не указывается. В классе HashSet определяется полный набор операций с множеством, определенных в интерфейсе I$et, включая пересечение, объединение и разноименность. Благодаря этому класс HashSet оказывается идеальным средством для работы с множествами объектов, когда порядок расположения элементов во множестве особого значения не имеет. Коллекция типа HashSet имеет динамический характер и расширяется по мере необходимости, чтобы вместить все элементы, которые должны в ней храниться.

Ниже перечислены наиболее употребительные конструкторы, определенные в классе HashSet.


public HashSet()

public HashSet(IEnumerable collection)

public HashSet(IEqualityCompare comparer)

public HashSet(IEnumerable collection, IEqualityCompare comparer)


В первой форме конструктора создается пустое множество, а во второй форме — множество, состоящее из элементов указываемой коллекции collection. В третьей форме конструктора допускается указывать способ сравнения с помощью параметра comparer. А в четвертой форме создается множество, состоящее из элементов указываемой коллекции collection, и используется заданный способ сравнения comparer. Имеется также пятая форма конструктора данного класса, в которой допускается инициализировать множество последовательно упорядоченными данными.

В классе HashSet реализуется интерфейс ISet, а следовательно, в нем предоставляется полный набор операций со множествами. В этом классе предоставляется также метод RemoveWhere(), удаляющий из множества элементы, не удовлетворяющие заданному условию, или предикату.

Помимо свойств, определенных в интерфейсах, которые реализуются в классе HashSet, в него введено дополнительное свойство Comparer, приведенное ниже.


public IEqualityComparer Comparer { get; }


Оно позволяет получать метод сравнения для вызывающего хеш-множества.

Ниже приведен конкретный пример применения класса HashSet.


// Продемонстрировать применение класса HashSet.

using System;

using System.Collections.Generic;


class HashSetDemo {

  static void Show(string msg, HashSet set) {

    Console.Write(msg);

    foreach(char ch in set)

      Console.Write(ch + " ");


    Console.WriteLine();

  }


  static void Main() {

    HashSet setA = new HashSet();

    HashSet setB = new HashSet();


    setA.Add('A');

    setA.Add('В');

    setA.Add('C');

    setB.Add('C');

    setB.Add('D');

    setB.Add('Е');


    Show("Исходное содержимое множества setA: ", setA);

    Show("Исходное содержимое множества setB: ", setB);


    setA.SymmetricExceptWith(setB);

    Show("Содержимое множества setA после " +

        "разноименности со множеством SetB: ", setA);


    setA.UnionWith(setB);

    Show("Содержимое множества setA после " +

        "объединения со множеством SetB: ", setA);


    setA.ExceptWith(setB);

    Show("Содержимое множества setA после " +

        "вычитания из множества setB: ", setA);


    Console.WriteLine();

  }

}


Ниже приведен результат выполнения программы из данного примера.


Исходное содержимое множества setA: A B C

Исходное содержимое множества setB: С D Е

Содержимое множества setA после разноименности со множеством SetB: А В D Е

Содержимое множества setA после объединения со множеством SetB: А В D Е С

Содержимое множества setA после вычитания из множества setB: А В


Класс SortedSet

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных