BTrees: 不同TreeSet实现之间有区别吗?
我在看BTrees这个库的时候,发现里面有好几个不同的TreeSet
(还有其他类),比如:
BTrees.IOBTree.TreeSet
BTrees.OOBTree.TreeSet
BTrees.LFBTree.TreeSet
- ...
我明白每个BTree
类是不同的,因为它们接受的键和值的类型不一样,但TreeSet
类呢?
通过反复尝试,我发现TreeSet
实例的第一个字母决定了它可以存储哪些类型的数据,但第二个字母呢?它对成员的存储和取出有影响吗?
有没有相关的文档可以参考?
1 个回答
1
不,TreeSet
类别忽略了第二个字母;它们在每个 XXBTree
模块中提供,主要是为了完整性和方便导入。
实际上,这些模块是通过很多巧妙的预处理宏来创建的,这样也更容易为每种键值类型变体生成一个 TreeSet
类型。
这个包的文档部分依赖于接口定义;每个模块都有一个接口,第一句话说明了该包中的集合包含什么:
class IIntegerObjectBTreeModule(IBTreeModule, IMerge):
"""keys, or set values, are integers; values are objects.
describes IOBTree and LOBTree"""
而
class IIntegerIntegerBTreeModule(IBTreeModule, IIMerge, IMergeIntegerKey):
"""keys, or set values, are integers; values are also integers.
describes IIBTree and LLBTree"""
例如,说明了对于 IOBTree
和 IIBTree
模块,集合的值都是整数。因此,IOBTree.TreeSet
和 IIBTree.TreeSet
实际上是 基本相同 的。
然后,包文档利用这些接口定义自动生成 API 文档,包括每个模块的文档以及(树)集合值的详细信息。