Класс SplayTreeMap< K, V>
A Map of objects that can be ordered relative to each other.
The map is based on a self-balancing binary tree. It allows most single-entry operations in amortized logarithmic time.
Keys of the map are compared using the compare function passed in the constructor, both for ordering and for equality. If the map contains only the key a, then map.containsKey(b) will return true if and only if compare(a, b) == 0, and the value of a == b is not even checked. If the compare function is omitted, the objects are assumed to be Comparable, and are compared using their Comparable.compareTo method. Non-comparable objects (including null) will not work as keys in that case.
To allow calling operator [], remove or containsKey with objects that are not supported by the compare function, an extra isValidKey predicate function can be supplied. This function is tested before using the compare function on an argument value that may not be a K value. If omitted, the isValidKey function defaults to testing if the value is a K.
Примечание: Не изменяйте карту (добавляйте или удаляйте ключи) во время выполнения операции на этой карте, например, в функциях, вызываемых во время forEach или putIfAbsent вызова, или во время итерации по карте (keys, values или entries).
Пример:
final planetsByMass = SplayTreeMap<double, String>((a, b) => a.compareTo(b));
Для добавления данных в карту используйте operator[]=, addAll или addEntries.
planetsByMass[0.06] = 'Mercury';
planetsByMass
.addAll({0.81: 'Venus', 1.0: 'Earth', 0.11: 'Mars', 317.83: 'Jupiter'}); Чтобы проверить, пуста ли карта, используйте isEmpty или isNotEmpty. Чтобы найти количество элементов карты, используйте length.
print(planetsByMass.isEmpty); // false print(planetsByMass.length); // 5
Метод forEach вызывает функцию для каждого элемента ключа/значения карты.
planetsByMass.forEach((key, value) {
print('$key \t $value');
// 0.06 Mercury
// 0.11 Mars
// 0.81 Venus
// 1.0 Earth
// 317.83 Jupiter
}); Чтобы проверить, содержит ли карта элемент с определенным ключом, используйте containsKey.
final keyOneExists = planetsByMass.containsKey(1.0); // true final keyFiveExists = planetsByMass.containsKey(5); // false
Чтобы проверить, содержит ли карта элемент со значением, используйте containsValue.
final earthExists = planetsByMass.containsValue('Earth'); // true
final plutoExists = planetsByMass.containsValue('Pluto'); // false Чтобы удалить элемент с определенным ключом, используйте remove.
final removedValue = planetsByMass.remove(1.0); print(removedValue); // Earth
Чтобы удалить несколько элементов одновременно, основываясь на их ключах и значениях, используйте removeWhere.
planetsByMass.removeWhere((key, value) => key <= 1);
print(planetsByMass); // {317.83: Jupiter} Чтобы условно добавить или изменить значение для определенного ключа, в зависимости от того, существует ли уже запись с этим ключом, используйте putIfAbsent или update.
planetsByMass.update(1, (v) => '', ifAbsent: () => 'Earth');
planetsByMass.putIfAbsent(317.83, () => 'Another Jupiter');
print(planetsByMass); // {1.0: Earth, 317.83: Jupiter} Чтобы обновить значения всех ключей, основываясь на существующем ключе и значении, используйте updateAll.
planetsByMass.updateAll((key, value) => 'X');
print(planetsByMass); // {1.0: X, 317.83: X} Чтобы удалить все записи и очистить карту, используйте clear.
planetsByMass.clear();
print(planetsByMass.isEmpty); // false
print(planetsByMass); // {} См. также:
- Map, общий интерфейс коллекций пар ключ/значение.
- HashMap — неупорядочена (порядок итерации не гарантируется).
- LinkedHashMap итерируется в порядке добавления ключей.
- Смешанные типы
-
-
MapMixin<
K, V>
-
MapMixin<
Конструкторы
- SplayTreeMap([int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?])
- SplayTreeMap.from(Map other, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?]) factory
- Создаёт SplayTreeMap, содержащую все пары ключ/значение из
other. - SplayTreeMap.fromIterable(Iterable iterable, {K key(dynamic element)?, V value(dynamic element)?, int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?}) factory
- Создаёт SplayTreeMap, где ключи и значения вычисляются из
iterable. - SplayTreeMap.fromIterables(Iterable<
K> keys, Iterable< V> values, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?]) factory - Создаёт SplayTreeMap, ассоциируя заданные
keysсvalues. - SplayTreeMap.of(Map<
K, V> other, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?]) factory - Создаёт SplayTreeMap, содержащую все пары ключ/значение из
other. Пример:
Свойства
- entries → Iterable<
MapEntry< K, V>> только для чтения, переопределено - Элементы карты this.
- hashCode → int только для чтения, унаследовано
- Код хэша этого объекта.
- isEmpty → bool только для чтения, переопределено
- Пуста ли карта.
- isNotEmpty → bool только для чтения, переопределено
- Содержит ли карта хотя бы один элемент.
- keys → Iterable<
K> только для чтения, переопределено - Ключи this.
- length → int только для чтения, переопределено
- Количество пар ключ/значение в карте.
- runtimeType → Type только для чтения, унаследовано
- Представление типа объекта во время выполнения.
- values → Iterable<
V> только для чтения, переопределено - Значения this.
Методы
- addAll(
Map< K, V> other) → void override - Добавляет все пары ключ/значение из
otherв эту карту. - addEntries(
Iterable< MapEntry< K, V>> newEntries) → void inherited - Добавляет все пары ключ/значение из
newEntriesв эту карту. - cast<
RK, RV>( ) → Map< RK, RV> inherited - Предоставляет представление этой карты как имеющей
RKключи иRVэкземпляры, если необходимо. - clear(
) → void override - Удаляет все записи из карты.
- containsKey(
Object? key) → bool override - Является ли эта карта содержит данный
key. - containsValue(
Object? value) → bool override - Содержит ли эта карта заданное
value. - firstKey(
) → K? - Первый ключ в карте.
- firstKeyAfter(
K key) → K? - Получить первый ключ в карте, строго больший, чем
key. Возвращаетnull, если ключ не найден. - forEach(
void f(K key, V value)) → void override - Применяет
actionк каждой паре ключ/значение в карте. - lastKey(
) → K? - Последний ключ в карте.
- lastKeyBefore(
K key) → K? - Последний ключ в карте, строго меньший, чем
key. - map<
K2, V2>( MapEntry< K2, V2> transform(K key, V value)) → Map< K2, V2> inherited - Возвращает новую карту, где все записи этой карты преобразуются заданной
convertфункцией. - noSuchMethod(
Invocation invocation) → dynamic inherited - Вызывается при доступе к несуществующему методу или свойству.
- putIfAbsent(
K key, V ifAbsent()) → V override - Ищет значение для
key, или добавляет новую запись, если ее нет. - remove(
Object? key) → V? override - Удаляет
keyи его связанное значение, если они присутствуют, из карты. - removeWhere(
bool test(K key, V value)) → void inherited - Удаляет все записи этой карты, удовлетворяющие заданному
test. - toString(
) → String inherited - Строковое представление этого объекта.
- update(
K key, V update(V value), {V ifAbsent()?}) → V override - Обновляет значение для предоставленного
key. - updateAll(
V update(K key, V value)) → void override - Обновляет все значения.
Операторы
- operator ==(
Object other) → bool inherited - Оператор равенства.
- operator [](
Object? key) → V? override - Значение для данного
key, илиnull, еслиkeyне в карте. - operator []=(
K key, V value) → void override - Связывает
keyс заданнымvalue.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-collection/SplayTreeMap-class.html