2014-01-29 25 views
0

我与哈希映射工作,我宣布水桶从SLLNode类型的数组保存MapEntry对象:努力理解对象的声明代码

private SLLNode<MapEntry<K, E>>[] buckets; 

现在,我不明白,在构造函数的代码:

buckets = (SLLNode<MapEntry<K, E>>[]) new SLLNode[m]; //where m is int, and it is 
                 // the size of the array. 

我不明白这个问题,以及:

public SLLNode<MapEntry<K,E>> search(K targetKey) { 

    int b = hash(targetKey); 

    for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = 
     curr.succ) { 
    if (targetKey.equals(((MapEntry<K, E>) curr.element).key)) 
     return curr; 

    if (targetKey.equals(((MapEntry<K, E>) curr.element).key)) 
     return curr; 
    } 

    return null; 

准确地说,我不明白如何将(K targetKey)转换为(MapEntry<K,E>)并将其用于equals方法的逻辑。

+0

'buckets =(SLLNode > [])new SLLNode [m];' - 哪一部分让您感到困惑?你能指出你不明白的具体语法,或者可能是你认为这不起作用的具体原因吗? – user2357112

+0

我不明白为什么(SLLNode > [])在新的SLLNode [m]之前使用。我一直都在使用它,但我不知道它到底是什么。通常我已经声明了如下对象:Object O = new Object(“something”) – Mario

回答

0

我无法理解的(K targetKey)如何被翻译成(MapEntry)逻辑

它不是。到targetKeyequals方法的参数是

((MapEntry<K, E>) curr.element).key 

这需要curr.element,它转换到MapEntry<K, E>,并提取key字段。因此,在另一个K对象上调用K对象的equals方法。