Skip to content

Latest commit

History

21 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Fast int64 -> int64 hash in golang.

GoDocGo Report Card

intintmap

import "github.com/brentp/intintmap"

Package intintmap is a fast int64 key -> int64 value map.

It is copied nearly verbatim from http://java-performance.info/implementing-world-fastest-java-int-to-int-hash-map/ .

It interleaves keys and values in the same underlying array to improve locality.

It is 2-5X faster than the builtin map:

BenchmarkIntIntMapFill 10 158436598 ns/op
BenchmarkStdMapFill 5 312135474 ns/op
BenchmarkIntIntMapGet10PercentHitRate 5000 243108 ns/op
BenchmarkStdMapGet10PercentHitRate 5000 268927 ns/op
BenchmarkIntIntMapGet100PercentHitRate 500 2249349 ns/op
BenchmarkStdMapGet100PercentHitRate 100 10258929 ns/op

Usage

m:=intintmap.New(32768, 0.6)
m.Put(int64(1234), int64(-222))
m.Put(int64(123), int64(33))
v, ok:=m.Get(int64(222))
v, ok:=m.Get(int64(333))
m.Del(int64(222))
m.Del(int64(333))
fmt.Println(m.Size())
fork:=rangem.Keys() {
fmt.Printf("key: %d\n", k)
}
forkv:=rangem.Items() {
fmt.Printf("key: %d, value: %d\n", kv[0], kv[1])
}

type Map

typeMapstruct {
}

Map is a map-like data-structure for int64s

func New

funcNew(sizeint, fillFactorfloat64) *Map

New returns a map initialized with n spaces and uses the stated fillFactor. The map will grow as needed.

func (*Map) Get

func (m*Map) Get(keyint64) (int64, bool)

Get returns the value if the key is found.

func (*Map) Put

func (m*Map) Put(keyint64, valint64)

Put adds or updates key with value val.

func (*Map) Del

func (m*Map) Del(keyint64)

Del deletes a key and its value.

func (*Map) Keys

func (m*Map) Keys() chanint64

Keys returns a channel for iterating all keys.

func (*Map) Items

func (m*Map) Items() chan [2]int64

Items returns a channel for iterating all key-value pairs.

func (*Map) Size

func (m*Map) Size() int

Size returns size of the map.

About

fast int64-int64 map for go

Resources

Stars

99 stars

Watchers

6 watching

Forks

Releases

Packages

Used by

Contributors

Languages