我在一个数据结构类中,我们有一个赋值,包括为拉丁字典和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个其他实现!任何帮助是极大的赞赏。感谢。
答案 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;
}