红黑树或AVL树在Java中的实现

红黑树或AVL树在Java中的实现,java,data-structures,collections,tree,guava,Java,Data Structures,Collections,Tree,Guava,Java collections/Guava/Apache Commons库中是否有任何红黑树/AVL树数据结构实现?如果是,你能指给我看吗。基本上,我正在寻找一个数据结构,其中查询应该在O(lgn)时间内发生。数据结构也会有一些更新,但不像查询那样频繁 基本上,我正在寻找一个数据结构,查询应该 在O(lgn)时间内发生 使用一个。它有一个备份,所以它的访问时间是O(logN)(我的重点是下面的引号) 公共类树映射 扩展AbstractMap实现 导航地图,可克隆,可序列化 基于红黑树的Navi

Java collections/Guava/Apache Commons库中是否有任何
红黑树
/
AVL树数据
结构实现?如果是,你能指给我看吗。基本上,我正在寻找一个数据结构,其中查询应该在O(lgn)时间内发生。数据结构也会有一些更新,但不像查询那样频繁

基本上,我正在寻找一个数据结构,查询应该 在O(lgn)时间内发生

使用一个。它有一个备份,所以它的访问时间是
O(logN)
(我的重点是下面的引号)

公共类树映射
扩展AbstractMap实现
导航地图,可克隆,可序列化

基于红黑树的NavigableMap实现。地图已排序 根据其键的自然顺序,或通过比较器 在地图创建时提供,具体取决于使用的构造函数

此实现为系统提供了保证的日志(n)时间成本 containsKey、get、put和remove操作


好的旧哈希表有什么问题?@delnan Yes哈希表可能是一种选择。我更喜欢ConcurrentHashMap这样的基于散列的映射,但我仍然想知道在这些常用的库中是否有这两种平衡的BST数据结构。如果您只需要一个映射(或集合),那么就选择
HashMap
,因为它更快(
O(1)
,系数较小)。忘掉HashTable吧,因为它已经过时了。如果需要并发,请使用
ConcurrentHashMap
。如果您需要订购,那么就选择
TreeMap
,而不管它是RB-Tree、AVL-Tree、Splay-Tree还是其他什么。如果你还需要其他东西,那么请扩展你的问题。我的意思是,番石榴的
TreeMultiset
在内部使用AVL树…@LouisWasserman感谢你提到treemultise,或者说是为了挑剔,但需要澄清的是,对数的基数是自然基数(即e=2.718281828)或者它只是以2为基数,即lg n?以2为基数。为什么它是
lnN
?因为二进制对数通常用lg n表示。我相信这是传统的表示法。如果它是O(logn),那么对数的底是不相关的,因为底的变化只涉及常数因子差。@Geek通常在谈论算法时,log(x)是logbase 2,除非另有说明。即使不是这样,正如路易斯·沃瑟曼所说,这一变化基本上是无关紧要的。