An efficient hashmap implementation in Go.
- Support for Generics.
Map
andSet
types 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/hashmap
This 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
// true
See BENCH.md for more info.
Josh Baker @tidwall
Source code is available under the MIT License.