HashMap<K,V>
Last updated
Was this helpful?
Last updated
Was this helpful?
Реализация: Iterable<Entry<K,V>>, Map<K,V>
Реализация хеш-таблицы интерфейса Map .
Реализует связи 1 к 1 по ключу типа К к элементам типа V. Отображение делается по хэшу для каждого ключа, что может быть настроено через передачу указателей на функции хэширования и проверку равенства ключей.
Вы можете передать собственную функцию хэширования и проверки равентсва конструктору, например:
var map = new Gee.HashMap<Foo, Object>(foo_hash, foo_equal);
Для строк и целых чисел хэш и функции проверки равенства подставляются автоматически, объекты различаются по их ссылкам по умолчанию. Вы должны передавать пользовательские функции хэширования и проверки равенства если хотите изменить стандартное поведение.
Эта реализация лучше подходит для сильно разнородных ключевых значений. В случае избыточности хеш-ключей или большого объема данных предпочтение отдается использованию дерева, например TreeMap .
Maps work like a dictionary. They store key - value pairs.
using Gee;
void main () {
var map = new HashMap<string, int> ();
// Setting values
map.set ("one", 1);
map.set ("two", 2);
map.set ("three", 3);
map["four"] = 4; // same as map.set ("four", 4)
map["five"] = 5;
// Getting values
int a = map.get ("four");
int b = map["four"]; // same as map.get ("four")
assert (a == b);
// Iteration
stdout.printf ("Итерация по значениям\n");
foreach (var entry in map.entries) {
stdout.printf ("%s => %d\n", entry.key, entry.value);
}
stdout.printf ("Итерация только по ключам\n");
foreach (string key in map.keys) {
stdout.printf ("%s\n", key);
}
stdout.printf ("Итерация только по значениям\n");
foreach (int value in map.values) {
stdout.printf ("%d\n", value);
}
stdout.printf ("Итерация с помощью for\n");
var it = map.map_iterator ();
for (var has_next = it.next (); has_next; has_next = it.next ()) {
stdout.printf ("%d\n", it.get_value ());
}
}
$ valac --pkg gee-0.8 gee-map.vala
$ ./gee-map
public EqualDataFunc<K> key_equal_func { get; } The keys' equality testing function.
public HashDataFunc<K> key_hash_func { get; } The keys' hash function.
public EqualDataFunc<V> value_equal_func { get; } The values' equality testing function.
public override Collection<V> values { owned get; } The read-only view of the values of this map.
public HashMap (owned HashDataFunc<K>? key_hash_func = null, owned EqualDataFunc<K>? key_equal_func = null, owned EqualDataFunc<V>? value_equal_func = null) Constructs a new, empty hash map.
public override void clear () Removes all items from this collection. Must not be called on read-only collections.
public override MapIterator<K,V> map_iterator () Returns an iterator for this map.
Полный список коллекций см здесь.