作业如下:
(50分)编写一个名为TreeMap的类,一个具有2个类型变量K和V的泛型类(K是键,V是可通过其键检索的值)。该类应具有以下方法:
公共V得到(K键); 此方法应检索存储在指定键下的映射中的值,如果映射中不存在该键,则返回null。
公共V放(K键,V val); 此方法应将指定的值存储在键下。如果密钥已存在于映射中,则应返回先前的值(并由新值覆盖)。如果密钥尚不存在,则该方法应返回null。
公开集< K>的keySet(); 此方法应以Key的自然顺序(例如,字符串的字母顺序)返回包含地图中所有键的Java集。
get和put方法应该在最坏情况下的Θ(log n)时间内运行,而keySet在Θ(n)时间内运行。您应该使用讲座中的红黑树代码作为代码的起点
我不只是在这里张贴期待有人给我答案,我只需要帮助。我在网上搜索过,所有与这个问题相关的内容都是在我的头上/似乎超出了作业的范围,或者说不存在。
get(),put()和keySet()如何成为唯一必需的方法?如果没有rotateRight(),rotateLeft()等方法,红黑树怎么可能工作呢?我是否应该通过使put()方法变得庞大来完成这些方法所做的一切?
你会笑,但这就是我到目前为止所做的一切,不知道从哪里继续。
import java.util.Set;
public class TreeMap301<K, V> {
K key;
V value;
private int size = 0;
public V get(K key){
return null;
}
public V put(K key, V val){
size += 1;
return null;
}
public Set<K> keySet(){
return null;
}
public int size(){
return size;
}
}
我甚至不确定应如何实施。我只是列出所有键的列表和所有值的列表吗?似乎这样会破坏目的。我只是在寻找一些指导。我知道我在这堂课中输了,所以请不要告诉我。
答案 0 :(得分:0)
我认为你正在寻找提示,而不是让任何人为你做任务(并感谢让我们知道这是一项任务)。以下是一些可以帮助您入门的建议:
如果您已经拥有红黑树的代码,那么您已经很远了地图。 RB树中的每个节点都应该包含一个键和一个值。
get方法实际上只是在树中搜索一个键并返回您找到的节点中的值。这应该是微不足道的。
put方法并不困难:它使用给定的键和值向树添加新节点(适当处理密钥已存在的情况)。这是调用所有重新平衡代码的地方。
keySet方法稍微复杂一些。它涉及遍历树中的每个节点并将密钥添加到集合中,然后返回该集合。再次没有太大的挑战性。
如果您希望获得任何相关的具体帮助,请发布您的代码尝试实施,并且我确定会有能够提供帮助的人。