面试题答案
一键面试put操作
- 底层实现原理:
- TreeMap是基于红黑树实现的。当执行
put(K key, V value)
方法时,首先会将键值对封装成一个Entry
对象。 - 然后从红黑树的根节点开始,比较插入键与当前节点键的大小(通过
compareTo
方法,TreeMap要求键实现Comparable
接口或者在构造时传入Comparator
)。 - 如果插入键小于当前节点键,则继续在当前节点的左子树中查找插入位置;如果插入键大于当前节点键,则在右子树中查找。
- 当找到合适的叶子节点位置(即某个节点的左子节点或右子节点为
null
)时,将新的Entry
插入为该节点的左子节点或右子节点。 - 插入完成后,可能会破坏红黑树的性质,因此需要进行调整(左旋、右旋、变色等操作)以恢复红黑树的性质。
- TreeMap是基于红黑树实现的。当执行
- 涉及的数据结构特性和算法:
- 数据结构特性:红黑树特性,如每个节点要么是红色,要么是黑色;根节点是黑色;每个叶子节点(
null
)是黑色;如果一个节点是红色,那么它的两个子节点都是黑色;从任意一个节点到其叶子节点的所有路径上包含相同数量的黑色节点。 - 算法:主要涉及红黑树的插入算法以及调整算法(左旋、右旋、变色等操作)。
- 数据结构特性:红黑树特性,如每个节点要么是红色,要么是黑色;根节点是黑色;每个叶子节点(
remove操作
- 底层实现原理:
- 首先通过
compareTo
方法(根据键的Comparable
接口实现或者构造时传入的Comparator
)在红黑树中查找要删除的节点。 - 找到节点后,根据节点的子节点情况进行不同处理:
- 如果要删除的节点没有子节点(叶子节点),直接删除该节点。
- 如果要删除的节点只有一个子节点,用其子节点替换该节点。
- 如果要删除的节点有两个子节点,找到其右子树中的最小节点(即最左子节点),用该最小节点的值替换要删除的节点的值,然后删除这个最小节点(此时该最小节点最多只有一个子节点,按上述只有一个子节点的情况处理)。
- 删除节点后,同样可能破坏红黑树的性质,需要进行调整(左旋、右旋、变色等操作)以恢复红黑树的性质。
- 首先通过
- 涉及的数据结构特性和算法:
- 数据结构特性:红黑树特性,在删除操作过程中要保证这些特性不被破坏。
- 算法:红黑树的查找算法用于定位要删除的节点,删除算法以及后续的调整算法(左旋、右旋、变色等操作)。
修改操作(通过put覆盖实现)
- 底层实现原理:
- 本质上就是
put
操作。当使用put
方法插入一个已存在的键时,新的值会覆盖旧的值。首先通过compareTo
方法在红黑树中查找该键对应的节点。 - 找到节点后,直接更新该节点的值为新值,树的结构不会发生变化,也不需要进行红黑树性质的调整。
- 本质上就是
- 涉及的数据结构特性和算法:
- 数据结构特性:利用红黑树的有序性进行快速查找。
- 算法:红黑树的查找算法,找到对应键的节点后进行值的更新。
get操作
- 底层实现原理:
- 从红黑树的根节点开始,通过
compareTo
方法(根据键的Comparable
接口实现或者构造时传入的Comparator
)比较要查找的键与当前节点键的大小。 - 如果要查找的键小于当前节点键,则继续在当前节点的左子树中查找;如果要查找的键大于当前节点键,则在右子树中查找。
- 当找到与要查找键相等的节点时,返回该节点对应的值;如果遍历完树都没有找到,则返回
null
。
- 从红黑树的根节点开始,通过
- 涉及的数据结构特性和算法:
- 数据结构特性:红黑树的有序性,使得可以通过比较大小快速缩小查找范围。
- 算法:红黑树的查找算法。