Spec-Zone .ru
спецификации, руководства, описания, API
|
A SortedSet
a Set
Comparator
если в SortedSet
время создания. В дополнение к нормальному Set
операции, SortedSet
интерфейс обеспечивает операции для следующего:
Range view
— позволяет произвольные операции диапазона на сортированном набореEndpoints
— возвращает первый или последний элемент в сортированном набореComparator access
— возвраты Comparator
, если таковые вообще имеются, используемый, чтобы сортировать наборКод для SortedSet
интерфейс следует.
public interface SortedSet<E> extends Set<E> { // Range-view SortedSet<E> subSet(E fromElement, E toElement); SortedSet<E> headSet(E toElement); SortedSet<E> tailSet(E fromElement); // Endpoints E first(); E last(); // Comparator access Comparator<? super E> comparator(); }
Операции это SortedSet
наследовался от Set
ведите себя тождественно на сортированных наборах и нормальных наборах с двумя исключениями:
Iterator
возвращенный iterator
работа пересекает приведенный в порядок сортированный.toArray
содержит элементы сортированного набора в порядке.Хотя интерфейс не гарантирует это, toString
метод платформы Java SortedSet
реализации возвращают строку, содержащую все элементы сортированного набора в порядке.
Условно, все общего назначения Collection
реализации предоставляют стандартному конструктору преобразования, который берет a Collection
; SortedSet
реализации не являются никаким исключением. В TreeSet
, этот конструктор создает экземпляр, который сортирует его элементы согласно их естественному упорядочиванию. Это было, вероятно, ошибкой. Было бы лучше проверить динамически, чтобы видеть, был ли указанный набор a SortedSet
экземпляр и, если так, чтобы сортировать новое TreeSet
согласно тому же самому критерию (компаратор или естественное упорядочивание). Поскольку TreeSet
проявлял подход, который это сделало, это также предоставляет конструктору, который берет a SortedSet
и возвращает новое TreeSet
содержа те же самые элементы сортируется согласно тому же самому критерию. Отметьте, что это - тип времени компиляции параметра, не его тип времени выполнения, который определяет, кто из этих двух конструкторов вызывается (и сохраняется ли критерий сортировки).
SortedSet
реализации также предоставляют, условно, конструктору, который берет a Comparator
и возвращает пустое множество, сортированное согласно указанному Comparator
. Если null
передается этому конструктору, это возвращает набор, который сортирует его элементы согласно их естественному упорядочиванию.
range-view
операции несколько походят на обеспеченных List
интерфейс, но есть одна большая разница. Представления диапазона сортированного набора остаются допустимыми, даже если поддержка сортированный набор изменяется непосредственно. Это выполнимо, потому что конечные точки представления диапазона сортированного набора являются абсолютными точками в пространстве элемента, а не определенными элементами в отступающем наборе, как имеет место для списков. A range-view
из сортированного набора действительно только окно на любую часть набора, находится в определяемой части пространства элемента. Изменения к range-view
запишите обратно к поддержке сортированный набор и наоборот. Таким образом это должно хорошо использовать range-view
s на сортированных наборах в течение долгих промежутков времени, в отличие от этого range-view
s в списках.
Сортированные наборы обеспечивают три range-view
операции. Первое, subSet
, берет две конечных точки, как subList
. А не индексы, конечные точки являются объектами и должны быть сопоставимыми с элементами в сортированном наборе, используя Set
's Comparator
или естественное упорядочивание его элементов, какой бы ни Set
использование, чтобы упорядочить себя. Как subList
, диапазон полуоткрыт, включая его низкую конечную точку, но, исключая высокий.
Таким образом следующая строка кода говорит Вам сколько слов между "doorbell"
и "pickle"
, включая "doorbell"
но, исключая "pickle"
, содержатся в a SortedSet
из вызванных строк dictionary
:
int count = dictionary.subSet("doorbell", "pickle").size();
Подобным способом следующая острота удаляет все элементы, начинающиеся с буквы f
.
dictionary.subSet("f", "g").clear();
Подобный прием может использоваться, чтобы напечатать таблицу, говоря Вам, сколько слов начинается с каждой буквы.
for (char ch = 'a'; ch <= 'z'; ) { String from = String.valueOf(ch++); String to = String.valueOf(ch); System.out.println(from + ": " + dictionary.subSet(from, to).size()); }
Предположите, что Вы хотите просмотреть закрытый интервал, который содержит обе из его конечных точек вместо открытого интервала. Если тип элемента учитывает вычисление преемника данного значения в пространстве элемента, просто запросите subSet
от lowEndpoint
к successor(highEndpoint)
. Хотя это не полностью очевидно, преемник строки s
в String
's естественное упорядочивание s + "\0"
— то есть, s
с a null
символ добавляется.
Таким образом следующая острота говорит Вам сколько слов между "doorbell"
и "pickle"
, включая дверной звонок и рассол, содержатся в словаре.
count = dictionary.subSet("doorbell", "pickle\0").size();
Подобный метод может использоваться, чтобы просмотреть открытый интервал, который не содержит никакую конечную точку. Представление открытого интервала от lowEndpoint
к highEndpoint
полуоткрытый интервал от successor(lowEndpoint)
к highEndpoint
. Используйте следующий, чтобы вычислить число слов между "doorbell"
и "pickle"
, исключая обоих.
count = dictionary.subSet("doorbell\0", "pickle").size();
SortedSet
интерфейс содержит еще два range-view
операции — headSet
и tailSet
, оба из которых берут сингл Object
параметр. Прежние возвраты представление начальной части поддержки SortedSet
, до, но не включая указанный объект. Последние возвраты представление заключительной части поддержки SortedSet
, начинание с указанного объекта и продолжение до конца поддержки SortedSet
. Таким образом следующий код позволяет Вам просматривать словарь как два непересекающийся volumes
(a-m
и n-z
).
SortedSet<String> volume1 = dictionary.headSet("n"); SortedSet<String> volume2 = dictionary.tailSet("n");
SortedSet
интерфейс содержит операции, чтобы возвратить первые и последние элементы в сортированном наборе, не удивительно вызванном first
и last
. В дополнение к их очевидному использованию, last
позволяет обходное решение для недостатка в SortedSet
интерфейс. Одна вещь требуется сделать с a SortedSet
должен войти во внутреннюю часть Set
и выполните итерации вперед или назад. Достаточно легко продвинуться от внутренней части: Только получите a tailSet
и выполните итерации по этому. К сожалению, нет никакого легкого способа пойти назад.
Следующая идиома получает первый элемент, который является меньше чем указанный объект o
в пространстве элемента.
Object predecessor = ss.headSet(o).last();
Это - прекрасный способ пойти один элемент назад от точки во внутренней части сортированного набора. Это могло быть применено неоднократно, чтобы выполнить итерации назад, но это очень неэффективно, требуя поиска для каждого возвращенного элемента.
SortedSet
интерфейс содержит вызванный метод средства доступа comparator
это возвращается Comparator
используемый, чтобы сортировать набор, или null
если набор сортируется согласно естественному упорядочиванию его элементов. Этот метод обеспечивается так, чтобы сортированные наборы могли быть скопированы в новые сортированные наборы с тем же самым упорядочиванием. Это используется SortedSet
конструктор описал ранее.