Spec-Zone .ru
спецификации, руководства, описания, API
След: Наборы
Урок: Реализации
Реализации набора
Домашняя страница > Наборы > Реализации

Реализации набора

Set реализации группируются в реализации специального назначения и общего назначения.

Реализации Набора общего назначения

Есть три общего назначения Set реализации — HashSet, TreeSet, и LinkedHashSet. Какой из этих трех, чтобы использовать является обычно прямым. HashSet намного быстрее чем TreeSet (постоянно-разовый против разового журналом для большинства операций), но предложения никакие гарантии упорядочивания. Если Вы должны использовать операции в SortedSet интерфейс, или если упорядоченный значением итерацию требуется, использует TreeSet; иначе, использовать HashSet. Это - ставка ярмарки, что Вы закончите тем, что использовали HashSet большую часть времени.

LinkedHashSet находится в некотором промежуточном звене смысла между HashSet и TreeSet. Реализованный как хэш-таблица со связанным списком, пробегающим это, это обеспечивает упорядоченную вставкой итерацию (наименее недавно вставленный к последний раз) и работает почти с такой скоростью, как HashSet. LinkedHashSet реализация спасает свои клиенты от неуказанного, обычно хаотического упорядочивания, обеспеченного HashSet не подвергаясь увеличенной стоимости, связанной с TreeSet.

Одна вещь стоящий учет о HashSet та итерация, линейно в сумме числа записей и числа блоков (емкость). Таким образом выбирая начальную емкость это слишком высоко, может потратить впустую оба пространства и времени. С другой стороны выбирая начальную емкость это слишком низко, напрасно тратит время, копируя структуру данных каждый раз, когда она вынуждается увеличить свою емкость. Если Вы не определяете начальную емкость, значение по умолчанию 16. В прошлом было некоторое преимущество для выбора простого числа как начальная емкость. Это больше не истина. Внутренне, емкость всегда окружается к питанию два. Начальная емкость определяется при использовании int конструктор. Следующая строка кода выделяет a HashSet чья начальная емкость 64.

Set<String> s = new HashSet<String>(64);

HashSet У class есть один другой настраивающий параметр, названный коэффициентом загрузки. Если Вы заботитесь много о потреблении пространства Вашего HashSet, читайте HashSet документация для получения дополнительной информации. Иначе, только примите значение по умолчанию; это - почти всегда правильная вещь сделать.

Если Вы принимаете коэффициент загрузки значения по умолчанию, но хотите определить начальную емкость, выберите число, которое это о дважды размере, к которому Вы ожидаете, что набор вырастет. Если Ваше предположение является путем прочь, можно потратить впустую немного пространства, время, или оба, но это вряд ли будет большая проблема.

LinkedHashSet имеет те же самые настраивающие параметры как HashSet, но на итеративное время не влияет емкость. TreeSet не имеет никаких настраивающих параметров.

Реализации Набора специального назначения

Есть два специального назначения Set реализации — EnumSet и CopyOnWriteArraySet.

EnumSet высокоэффективное Set реализация для перечислимых типов. Все элементы перечислимого набора должны иметь тот же самый перечислимый тип. Внутренне, это представляется битовый вектором, обычно сингл long. Перечисление устанавливает итерацию поддержки по диапазонам перечислимых типов. Например, учитывая перечислимое объявление в течение дней недели, можно выполнить итерации за будние дни. EnumSet class обеспечивает статическую фабрику, которая облегчает.

    for (Day d : EnumSet.range(Day.MONDAY, Day.FRIDAY))
        System.out.println(d);

Перечислимые наборы также обеспечивают богатую, безопасную с точки зрения типов замену для традиционных битовых флагов.

    EnumSet.of(Style.BOLD, Style.ITALIC)

CopyOnWriteArraySet a Set реализация поддерживается массивом копии на записи. Все изменчивые операции, такой как add, set, и remove, реализуются, делая новую копию массива; никакая блокировка никогда не требуется. Даже итерация может безопасно продолжиться одновременно со вставкой элемента и удалением. В отличие от этого больше всего Set реализации, add, remove, и contains методы требуют времени, пропорционального размеру набора. Эта реализация является только подходящей для наборов, которые редко изменяются, но часто выполняются с помощью итераций. Это хорошо подходит для поддержания списков обработчика событий, которые должны предотвратить копии.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Реализации
Следующая страница: Реализации Списка