最近使用go开发排行榜的需求, 有些情况会用到有序map
, 但是go竟然没有有序map的实现
本着自己动手丰衣足食的原则, 就自己实现了一个
原理比较简单, 主要结合了container/list
双向链表和map
使用双向链表存储key和value, 保证顺序, 使用map存储key和节点信息, 保证查找的时间复杂度
在增加, 删除, 修改, 查询时保证了O(1)的复杂了, 感兴趣的同学可以查看源码, 多多给出更多优化意见
go get -u github.com/shuaibingn/go-extension/ordered_map
```go
package main
import (
"fmt"
"github.com/shuaibingn/go-extension/ordered_map"
)
func main() {
om := ordered_map.NewOrderedMap[string, string]() // 初始化有序map
om.Set("key1", "value1") // 设置key, value
om.Set("key2", "value2")
om.Set("key3", "value3")
value, ok := om.Get("key1") // 获取key1的值
fmt.Println(value, ok)
om.Remove("key2") // 删除key2
keys := om.Keys() // 获取所有的key
fmt.Println(keys)
values := om.Values() // 获取所有的value
fmt.Println(values)
// 有序map遍历
for item := range om.Iterator() {
fmt.Println(item.Key, item.Value)
}
om.Clear() // 清空有序map
fmt.Println(om.Len()) // 获取有序map的长度
}