Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我被要求实现一个基于树的映射,但我不知道我';我在做什么_Java_Dictionary_Tree - Fatal编程技术网

Java I';我被要求实现一个基于树的映射,但我不知道我';我在做什么

Java I';我被要求实现一个基于树的映射,但我不知道我';我在做什么,java,dictionary,tree,Java,Dictionary,Tree,任务如下: (50分)编写一个名为TreeMap的类,这是一个具有两个类型变量K和V的泛型类(K是一个键,V是一个可通过其键检索的值)。该类应具有以下方法: public V get(K键) 此方法应检索存储在映射中指定键下的值,如果映射中不存在该键,则应检索null 公共V put(K键,V值) 此方法应在键下存储指定的值。如果该键已存在于映射中,则应返回上一个值(并被新值覆盖)。如果该键不存在,则该方法应返回null 公共设置键集() 此方法应返回一个Java集,其中包含映射中的所有键,并按

任务如下:

(50分)编写一个名为TreeMap的类,这是一个具有两个类型变量K和V的泛型类(K是一个键,V是一个可通过其键检索的值)。该类应具有以下方法:

public V get(K键) 此方法应检索存储在映射中指定键下的值,如果映射中不存在该键,则应检索null

公共V put(K键,V值) 此方法应在键下存储指定的值。如果该键已存在于映射中,则应返回上一个值(并被新值覆盖)。如果该键不存在,则该方法应返回null

公共设置键集() 此方法应返回一个Java集,其中包含映射中的所有键,并按键的自然顺序(例如,字符串的字母顺序)

get和put方法应该在最坏情况下的Θ(logn)时间内运行,而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;
}
}     

我甚至不知道该如何实施。我是否要为所有键和所有值创建一个列表?看来那会破坏目的。我只是想找些指导。我知道我在这门课上迷路了,所以请不要告诉我

我想你是在寻找提示,而不是让任何人帮你做作业(谢谢你让我们知道这是一项作业)。以下是一些让您开始的想法:

  • 如果你已经有了红黑树的代码,那么你已经有很长的路要走了。RB树中的每个节点都应该包含一个键和一个值

  • get方法实际上只是在树中搜索一个键,并在找到的节点中返回值。这应该是微不足道的

  • put方法并不难:它使用给定的键和值向树中添加一个新节点(适当处理键已经存在的情况)。这就是调用所有重新平衡代码的地方

  • 关键帧集方法稍微复杂一些。它涉及遍历树中的每个节点,并将密钥添加到一个集合中,然后返回该集合。同样也不太具有挑战性


  • 如果您想获得这些方面的任何具体帮助,请发布您尝试实现的代码,我相信会有人提供帮助。

    检查Java的
    Treemap
    源代码“类应具有以下方法…”并不意味着该类只能具有以下方法。您是对的,但这正是这位教授用这种方式表达的意思,我已经研究他一年了。他的示例解决方案总是比实际的Java实现短10倍,这常常让我感到困惑。此外,我还研究了Java的源代码。它使用了我们还没有讨论过的东西,如果我使用了其中的大部分东西,课后我肯定会被要求留下来。我怀疑“应该有下面的方法”真的意味着“应该有下面的公共方法”。你肯定需要大量的私有方法来实现这一点。这个“讲座中的红黑树代码”怎么样?如果你明白这一点,那应该是90%以上的必修课了。所以我正试着开始,我对我的教授做事的方式感到非常失望。所以我正试图编写我的程序,扩展课堂上的红黑树代码。问题是,我的类、红黑类和测试客户机类都需要在一个命名包中才能扩展。但是,问题是RedBlack类从默认包导入类,当我将该类移动到命名包时,这些类将无法再导入,这必须完成。其次,我的代码给了我错误,比如final Queue q=new Queue;队列是一个接口。我认为您需要将导入问题放到一个单独的问题中。我不知道你所说的“从默认包导入类”是什么意思。通常,如果您有正确的导入语句,那么将类移动到新包中不会引起问题。