класс SplayTreeMap< K, V>
Map объектов, которые можно упорядочить относительно друг друга.
Карта основана на самобалансирующемся бинарном дереве. Большинство операций с одной записью выполняются за амортизированное логарифмическое время.
Ключи карты сравниваются с помощью функции compare, переданной конструктору, как для упорядочивания, так и для проверки на равенство. Если карта содержит только ключ a, то map.containsKey(b) вернёт true тогда и только тогда, когда compare(a, b) == 0, а значение a == b даже не проверяется. Если функция сравнения не указана, предполагается, что объекты реализуют Comparable, и они сравниваются с помощью метода Comparable.compareTo. В этом случае несравнимые объекты (включая null) нельзя использовать в качестве ключей.
Чтобы вызывать operator [], remove или containsKey с объектами, которые не поддерживаются функцией compare, можно передать дополнительную функцию-предикат isValidKey. Эта функция проверяется до применения функции compare к значению аргумента, которое может не быть значением K. Если она не указана, функция isValidKey по умолчанию проверяет, является ли значение значением 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)?]) фабричный
- Создаёт SplayTreeMap, содержащую все пары ключ/значение из
other. - SplayTreeMap.fromIterable(Iterable iterable, {K key(dynamic element)?, V value(dynamic element)?, int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?}) фабричный
- Создаёт SplayTreeMap, ключи и значения которой вычисляются из
iterable. - SplayTreeMap.fromIterables(Iterable<
K> keys, Iterable< V> values, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?]) фабричный - Создаёт SplayTreeMap, сопоставляя заданные
keysсvalues. - SplayTreeMap.of(Map<
K, V> other, [int compare(K key1, K key2)?, bool isValidKey(dynamic potentialKey)?]) фабричный - Создаёт 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 переопределено - Добавляет в эту карту все пары ключ/значение из
other. - addEntries(
Iterable< MapEntry< K, V>> newEntries) → void унаследовано - Добавляет в эту карту все пары ключ/значение из
newEntries. - cast<
RK, RV>( ) → Map< RK, RV> унаследовано - Предоставляет представление этой карты с ключами типа
RKи экземплярами типаRV, при необходимости выполняя преобразование типов. - clear(
) → void переопределено - Удаляет все записи из карты.
- containsKey(
Object? key) → bool переопределено - Указывает, содержит ли эта карта заданный
key. - containsValue(
Object? value) → bool переопределено - Указывает, содержит ли эта карта заданный
value. - firstKey(
) → K? - Первый ключ карты.
- firstKeyAfter(
K key) → K? - Возвращает первый ключ карты, строго больший, чем
key. Возвращаетnull, если ключ не найден. - forEach(
void f(K key, V value)) → void переопределено - Применяет
actionк каждой паре ключ/значение карты. - lastKey(
) → K? - Последний ключ карты.
- lastKeyBefore(
K key) → K? - Последний ключ карты, строго меньший, чем
key. - map<
K2, V2>( MapEntry< K2, V2> transform(K key, V value)) → Map< K2, V2> унаследовано - Возвращает новую карту, в которой все записи этой карты преобразованы с помощью заданной функции
convert. - noSuchMethod(
Invocation invocation) → dynamic унаследовано - Вызывается при обращении к несуществующему методу или свойству.
- putIfAbsent(
K key, V ifAbsent()) → V переопределено - Ищет значение для
keyили добавляет новую запись, если её нет. - remove(
Object? key) → V? переопределено - Удаляет
keyи связанное с ним значение из карты, если оно присутствует. - removeWhere(
bool test(K key, V value)) → void унаследовано - Удаляет все записи этой карты, удовлетворяющие заданному
test. - toString(
) → String унаследовано - Строковое представление этого объекта.
- update(
K key, V update(V value), {V ifAbsent()?}) → V переопределено - Обновляет значение для указанного
key. - updateAll(
V update(K key, V value)) → void переопределено - Обновляет все значения.
Операторы
- operator ==(
Object other) → bool унаследовано - Оператор равенства.
- operator [](
Object? key) → V? переопределено - Значение для заданного
keyилиnull, еслиkeyотсутствует в карте. - operator []=(
K key, V value) → void переопределено - Связывает
keyс заданнымvalue.
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-collection/SplayTreeMap-class.html