An efficient hashmap implementation in Go.
- Support for Generics.
MapandSettypes for unordered key-value maps and sets,- xxh3 algorithm
- Open addressing with Robin hood hashing
- Automatically shinks memory on deletes (no memory leaks).
- Pretty darn good performance. 🚀 (benchmarks).
For ordered key-value data, check out the tidwall/btree package.
To start using hashmap, install Go and run go get:
go get github.com/tidwall/hashmapThis will retrieve the library.
The Map type works similar to a standard Go map, and includes the methods:
Set, Get, Delete, Len, Scan, Keys, Values, and Copy.
var m hashmap.Map[string, string]
m.Set("Hello", "Dolly!")
val, _ := m.Get("Hello")
fmt.Printf("%v\n", val)
val, _ = m.Delete("Hello")
fmt.Printf("%v\n", val)
val, _ = m.Get("Hello")
fmt.Printf("%v\n", val)
// Output:
// Dolly!
// Dolly!
//The Set type is like Map but only for keys.
It includes the methods: Insert, Contains, Delete, Len, Scan and Keys.
var m hashmap.Set[string]
m.Insert("Andy")
m.Insert("Kate")
m.Insert("Janet")
fmt.Printf("%v\n", m.Contains("Kate"))
fmt.Printf("%v\n", m.Contains("Bob"))
fmt.Printf("%v\n", m.Contains("Andy"))
// Output:
// true
// false
// trueSee BENCH.md for more info.
Josh Baker @tidwall
Source code is available under the MIT License.