如何从哈希表中的(K,V)节点获取V到另一个类中的调用方法?

时间:2011-11-18 05:20:18

标签: java casting nodes

我在一个数据结构类中,我们有一个赋值,包括为拉丁字典和LatinDictionary类(基本上是一个包装器)中的getDefinition方法创建一个哈希表,它在输入一个字符串后请求字符串返回像这样的字符串......

import java.util.Iterator;
import data_structures.*;

public class LatinDictionary {
private DictionaryADT<String,String> dictionary;
private int maxSize = DictionaryReader.entries.length;
....
public String getDefinition(String latinWord) {
    return dictionary.getValue(latinWord);
}

getValue方法如下:

package data_structures;
import java.util.Iterator;

public class HashTable <K,V> implements DictionaryADT<K,V>{

private int maxSize,currentSize,tableSize;
private UnorderedList<DictionaryNode<K,V>>[] list;
DictionaryADT<String, String> dictionary;
...
public V getValue(K key){
    int code = hashCode((String)key);
    DictionaryNode temp = new DictionaryNode(key,null);
    if(!list[code].contains(temp))return null;
    DictionaryNode temp2 = new DictionaryNode(null, list[code].find(temp));
    return (V) temp2.value;
}

和无序列表类中的find方法如下:

package data_structures;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class UnorderedList<E> implements Iterable<E>{
public E find(E object) {
    Node<E> current=head;
    Node<E> previous = head;
    Node<E> temp=null;
    while(current!=null && ((Comparable<E>)object).compareTo((current.data))!=0){
        previous=current;
        current=current.next;
        temp=current;
        }

    return temp.data;
    }

dictionaryADT是一个提供的接口,规范是LatinDictionary只引用ADT对象而不是哈希表本身。 另外,我无法导入java.util。*。
无论我尝试什么,我都会根据我的尝试继续得到“无法施放”错误或其他错误,但我无法看到如何从V到字符串。 不幸的是,我无法在互联网上找到与自建的哈希表有关的任何东西,更不用说我必须在这里使用的那种实现。与哈希表有关的任何东西都使用内置版本,而不是自编写的版本,这种用法很少。我有这个项目在2个星期到期,但在此之后还有3个其他实现!任何帮助是极大的赞赏。感谢。

3 个答案:

答案 0 :(得分:0)

如果你不能像@Shakedown那样做,那么你可以这样做:

public class LatinDictionary implements HomeworkHashtable<String, String> {

    public String getValue(String key){
        int code = hashCode(key);
        DictionaryNode temp = new DictionaryNode(key,null);
        if(!list[code].contains(temp))return null;
        DictionaryNode temp2 = new DictionaryNode(null, list[code].find(temp));
        return temp2.value;
    }

}

答案 1 :(得分:0)

我需要看看Map类的定义和无序列表类,但可能是字典定义如下

public class MyMap<K, V> {
  public V getValue(K key) ...
}

如果是这种情况,请在LatinDictionary后端地图(dictionary)中使用通用类型String声明。

public class LatinDictionary {
  private MyMap<String, String> dictionary ...
}

在这种情况下,您无需转换为String,即可返回正确的类别。

[编辑]另外请注意,如果您正在编写地图的实现,则需要考虑哈希冲突。

你也可以考虑使用一些标准的Java方法,它们通常会为你省去麻烦。

//This
int code = hashCode((String) key);
//Could become this
int code = key.hashCode();    //Don't need any casts!

答案 2 :(得分:0)

我得到了......而不是

public V getValue(K key){
.....
DictionaryNode temp2 = new DictionaryNode(null, list[code].find(temp));

它应该是......

public V getValue(K key){
....
DictionaryNode temp2 = new DictionaryNode(null, list[code].find(temp).value);
return (V) temp2.value;
}