考虑到您的限制,您所要求的是可能的。
分析
哈希表的优势在于其快速的查找和插入速度。为了获得这种速度,必须放弃表中的任何顺序的外观:即,所有条目都被弄乱了。列表可以用作表条目,因为遍历为O(n)时,假设哈希表足够大,并且使用高质量的哈希算法对存储在表中的对象进行哈希处理,则列表往往较短。
二进制搜索树(BST)具有快速插入和查找O(log 2 n)的能力。它还对它存储的元素施加了限制:必须有某种方式来排序元素。给定存储在树中的两个元素A和B,必须能够确定A是否在B之前,或者它们是否具有相等的顺序。
哈希表没有施加任何限制:哈希表中的元素必须具有两个属性。首先,必须有一种方法来确定它们是否等效;其次,必须有一种计算确定性哈希码的方法。订单不是必需的。
如果您的哈希表元素确实具有顺序,则可以将BST用作哈希表条目,以保存具有相同哈希码(冲突)的对象。但是,由于具有O(log 2 n)查找和插入的BST ,这意味着整个结构(哈希表加BST)的最坏情况在技术上要比使用列表作为表条目更好。根据BST的实现,它将需要比列表更多的存储空间,但可能不会更多。
请注意,通常是BST的开销和行为带来什么表在现实世界作为哈希表桶,这就是为什么列表的理论性能差是可以接受的。换句话说,哈希表通过在每个列表(存储桶)中放置较少的项来补偿列表的弱点。但是:问题特别指出,哈希表无法增加大小,并且冲突比哈希表中的典型情况更为频繁。
实作
我不会在这里放置代码,因为说实话这不是真正必要的,而且您也没有提供任何语言。
我要做的就是简单地将您语言的标准库包含的任何标准哈希表复制到新类中,然后将表存储桶类型从列表更改为树。根据语言及其标准库,这可能是一件非常琐碎的事情。
通常,我不会提倡像这样复制和粘贴代码。但是,这是一种非常快速地获得经过测试的数据结构的简便方法。