Skip to content

Latest commit

 

History

History
62 lines (46 loc) · 6.78 KB

README_zh.md

File metadata and controls

62 lines (46 loc) · 6.78 KB

gcontainer -- Go 语言的全泛型数据结构(容器)实现

English | 简体中文

包含 Go 语言实现的各类数据结构(容器),全面支持泛型,目标是复刻 Java 类库中的 java.util 和 java.util.concurrent 包里的数据结构实现。

License MIT Golang

import "github.com/wesleywu/gcontainer"

前言

在 Golang 的生态中,有不少优秀的库都实现了各类数据结构,例如

  • stl4go 实现了大部分泛型容器和算法,类似 C++ 中的 STL
  • lo Lodash风格的 Go 实现
  • goframe container 实现了绝大多数数据结构,但不支持泛型

为什么还要再造一个轮子呢?

  • 作为一个二十多年的Java程序员,习惯了Java类库中对各类容器接口、方法的精准命名和优雅实现,希望能将之前的肌肉记忆应用到 Go 语言当中
  • 在使用 Go 开发的过程中,频繁的需要用到各种数据结构,比较看来 goframe 提供的库是最全的,完全满足需求,且都实现了线程安全。但可惜 goframe 会在相对较长的时间里,保持对 go 1.15 版本的兼容,而不会支持泛型。

本库将 goframe 的数据结构实现从 goframe 项目中剥离出来,改为全泛型支持。 参照 Java 类库做了 interface 的定义,并对实现 struct 和 method(function) 进行适当的更名。

所有容器的实现,在创建时都可选择是否线程安全

容器接口

已实现(实现中)的容器接口,与 Java 8 类库的对应关系如下:

gcontainer java.util 用途
Collection[T] Collection 集合和列表容器的基础接口
Set[T] Set 集合容器的接口
SortedSet[T] NavigableSet 有序集合容器的接口
List[T] List 列表容器的接口
Map[K, V] Map<K, V> key-value 关联容器的接口
SortedMap[K, V] NavigableMap<K, V> 有序 key-value 关联容器的接口
MapEntry[K, V] Map.Entry<K, V> 有序 key-value 关联容器的接口
实现中 Queue 先进先出的队列的接口
实现中 Deque 双端队列的接口

容器结构体

已实现的容器结构体,与 Java 8 类库的对应关系如下:

gcontainer java.util java.util.concurrent 用途
ArrayList[T] ArrayList 无对应 基于数组的列表
LinkedList[T] LinkedList 无对应 基于双向链表的列表
HashSet[T] HashSet 无对应 基于map的去重集合
TreeSet[T] TreeSet 无对应 基于TreeMap红黑树的去重排序集合
HashMap[K, V] HashMap<K, V> ConcurrentHashMap<K, V> 基于map的key-value关联表
TreeMap[K, V] TreeMap<K, V> ConcurrentSkipListMap<K, V> 基于红黑树的排序key-value关联表
AVLTree[K, V] 无对应 基于avl-tree的排序key-value关联表
BTree[K, V] 无对应 基于b-tree的排序key-value关联表
Queue[T] PriorityQueue LinkedBlockingQueue 基于channel的阻塞队列
Ring[T] 无对应 环容器