【发布时间】:2014-02-16 06:17:29
【问题描述】:
我正在构建一个通用 HashTable 类,我们在其中使用简单的 Java .hashCode() 方法将键转换为哈希,以数组大小为模,并存储在结果中的索引中。唯一的问题是教授希望我们不仅存储值,还存储我们散列的键。为此,我创建了一个 Data 类来存储和获取这两个值:
private class Data {
private K key;
private V value;
public Data(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
}
很简单的东西。当我尝试创建数据项数组来保存哈希值和生成它们的键时,困难就来了。 K 和 V 是在 HashTable 类声明中指定的通用值:
public class HashTable<K,V> implements Table<K,V>
当我第一次创建这个类时,我只是在一个对象数组上使用强制转换来创建一个 V 数组,但由于我们需要存储这两个值,我决定创建 Data 类并存储它们。但是当我用我的
hashArray = (Data[])new Object[arraySize];
它给了我错误
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lproject3.HashTable$Data;
这使我无法创建 Data 类型的数组。是否有另一种方法可以在不使用 List 的情况下存储它(因为这是分配的参数)?
【问题讨论】:
-
考虑查看
java.util.HashMap的实现并检查他们如何处理它。