Класс HashMap< K, V>
Реализация Map на основе хеш-таблицы.
HashMap не упорядочен (порядок итерации не гарантируется).
Ключи HashMap должны иметь согласованные реализации Object.== и Object.hashCode. Это означает, что оператор == должен определять стабильное отношение эквивалентности для ключей (рефлексивное, симметричное, транзитивное и неизменное с течением времени), а hashCode должно быть одинаковым для объектов, которые считаются равными согласно ==.
Итерация по ключам, значениям или записям карты (с помощью forEach) может происходить в любом порядке. Порядок итерации меняется только при изменении карты. Значения перебираются в том же порядке, что и соответствующие им ключи, поэтому параллельная итерация по keys и values позволит получить соответствующие пары ключей и значений.
Обратите внимание: Не изменяйте карту (не добавляйте и не удаляйте ключи), пока выполняется операция над этой картой, например в функциях, вызываемых во время вызова forEach или putIfAbsent, либо во время итерации по карте (keys, values или entries).
Пример:
final Map<int, String> planets = HashMap(); // Is a HashMap
Чтобы добавить данные в карту, используйте operator[]=, addAll или addEntries.
planets[3] = 'Earth';
planets.addAll({4: 'Mars'});
final gasGiants = {6: 'Jupiter', 5: 'Saturn'};
planets.addEntries(gasGiants.entries);
print(planets); // fx {5: Saturn, 6: Jupiter, 3: Earth, 4: Mars} Чтобы проверить, пуста ли карта, используйте isEmpty или isNotEmpty. Чтобы узнать количество записей в карте, используйте length.
final isEmpty = planets.isEmpty; // false final length = planets.length; // 4
forEach выполняет итерацию по всем записям карты.
planets.forEach((key, value) {
print('$key \t $value');
// 5 Saturn
// 4 Mars
// 3 Earth
// 6 Jupiter
}); Чтобы проверить, содержит ли карта запись с определённым ключом, используйте containsKey.
final keyOneExists = planets.containsKey(4); // true
final keyFiveExists = planets.containsKey(1); // false
```dart continued
To check whether the map has an entry with a specific value,
use [containsValue].
```dart continued
final marsExists = planets.containsValue('Mars'); // true
final venusExists = planets.containsValue('Venus'); // false Чтобы удалить запись с определённым ключом, используйте remove.
final removeValue = planets.remove(5);
print(removeValue); // Jupiter
print(planets); // fx {4: Mars, 3: Earth, 5: Saturn} Чтобы одновременно удалить несколько записей на основе их ключей и значений, используйте removeWhere.
planets.removeWhere((key, value) => key == 5);
print(planets); // fx {3: Earth, 4: Mars} Чтобы условно добавить или изменить значение для определённого ключа в зависимости от того, существует ли уже запись с таким ключом, используйте putIfAbsent или update.
planets.update(4, (v) => 'Saturn');
planets.update(8, (v) => '', ifAbsent: () => 'Neptune');
planets.putIfAbsent(4, () => 'Another Saturn');
print(planets); // fx {4: Saturn, 8: Neptune, 3: Earth} Чтобы обновить значения для всех ключей на основе существующих ключей и значений, используйте updateAll.
planets.updateAll((key, value) => 'X');
print(planets); // fx {8: X, 3: X, 4: X} Чтобы удалить все записи и очистить карту, используйте clear.
planets.clear();
print(planets); // {}
print(planets.isEmpty); // true См. также:
- Map — общий интерфейс коллекций пар ключ/значение.
- LinkedHashMap выполняет итерацию в порядке добавления ключей.
- SplayTreeMap выполняет итерацию по ключам в отсортированном порядке.
- Реализуемые типы
-
-
Map<
K, V>
-
Map<
Конструкторы
- HashMap({bool equals(K, K)?, int hashCode(K)?, bool isValidKey(dynamic)?}) factory
- Создаёт неупорядоченную Map на основе хеш-таблицы.
- HashMap.from(Map other) factory
- Создаёт HashMap, содержащую все пары ключ/значение из
other. - HashMap.fromEntries(Iterable<
MapEntry< K, V>> entries) factory - Создаёт HashMap, содержащую записи из
entries. - HashMap.fromIterable(Iterable iterable, {K key(dynamic element)?, V value(dynamic element)?}) factory
- Создаёт HashMap, в которой ключи и значения вычисляются на основе
iterable. - HashMap.fromIterables(Iterable<
K> keys, Iterable< V> values) factory - Создаёт HashMap, сопоставляющую заданные
keysиvalues. - HashMap.identity() factory
- Создаёт неупорядоченную карту на основе идентичности объектов.
- HashMap.of(Map<
K, V> other) factory - Создаёт HashMap, содержащую все пары ключ/значение из
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. - forEach(
void action(K key, V value)) → void унаследовано - Применяет
actionк каждой паре ключ/значение карты. - map<
K2, V2>( MapEntry< K2, V2> convert(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/HashMap-class.html