【发布时间】:2019-12-04 19:16:41
【问题描述】:
为了给您一些背景信息,我正在尝试使用 Java 从头构建一个 HashMap。
我在尝试实例化节点数组时遇到了一些问题(如下定义的私有类)。我只想先实例化数组(在构造函数中),然后再更新同一个数组(在尚未实现的方法中)。
请在下面找到复制错误和错误消息的代码。为什么this.array = (K[]) new Object[this.size]; 行有效而this.buckets = (Node[]) new Object[this.size]; 行无效?
这是否可以在 Java 中实现,还是我应该完全重新考虑逻辑?
public class MyHashMapTest<K, V> {
private class Node {
K key;
V val;
Node next;
Node(K k, V v, Node n) {
key = k;
val = v;
next = n;
}
}
private static final double defaultLoadFactor = 0.75;
private static final int defaultSize = 16;
private Node[] buckets;
private K[] array;
private int size;
private int items;
private double loadFactor;
public MyHashMapTest() {
this(defaultSize, defaultLoadFactor);
}
public MyHashMapTest(int initialSize) {
this(initialSize, defaultLoadFactor);
}
public MyHashMapTest(int initialSize, double loadFactor) {
this.size = initialSize;
this.loadFactor = loadFactor;
this.items = 0;
this.array = (K[]) new Object[this.size];
this.buckets = (Node[]) new Object[this.size];
}
public static void main(String[] args) {
MyHashMapTest<String, String> a = new MyHashMapTest<String, String>();
}
}
【问题讨论】:
-
这能回答你的问题吗? casting Object array to Integer array error
-
感谢分享链接,其实我知道如何实例化一个整数数组。我正在尝试实例化一个节点数组(如上定义)。我已经编辑了我的帖子以更好地反映这一点。
-
this.buckets = new Node[this.size];有什么问题? -
问题是,您不能将基类型的数组转换为派生类型的数组。您需要单独转换每个元素。
-
你必须使用反射(特别是
Array.newInstance)以编程方式创建一个泛型数组。