在Java中初始化私有对象数组
为了让您了解一下上下文,我正在尝试使用Java从头构建一个HashMap 当我试图实例化一个节点数组(如下定义的私有类)时,我遇到了一些问题。我只想先实例化数组(在构造函数中),然后更新相同的数组(在尚未实现的方法中) 请在下面找到复制错误和错误消息的代码。为什么行在Java中初始化私有对象数组,java,arrays,generics,Java,Arrays,Generics,为了让您了解一下上下文,我正在尝试使用Java从头构建一个HashMap 当我试图实例化一个节点数组(如下定义的私有类)时,我遇到了一些问题。我只想先实例化数组(在构造函数中),然后更新相同的数组(在尚未实现的方法中) 请在下面找到复制错误和错误消息的代码。为什么行this.array=(K[])新对象[this.size]工作,行this.bucket=(节点[])新对象[this.size]不起作用 这在Java中是可以实现的,还是应该完全重新思考逻辑 public class MyHash
this.array=(K[])新对象[this.size]代码>工作,行this.bucket=(节点[])新对象[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>();
}
}
公共类MyHashMapTest{
私有类节点{
K键;
V-val;
节点下一步;
节点(K,V,n){
key=k;
val=v;
next=n;
}
}
专用静态最终双默认加载系数=0.75;
私有静态最终int defaultSize=16;
私有节点[]个存储桶;
私有K[]数组;
私有整数大小;
私人物品;
私有双负载因子;
公共MyHashMapTest(){
这(defaultSize,defaultLoadFactor);
}
公共MyHashMapTest(int initialSize){
这(initialSize,defaultLoadFactor);
}
公共MyHashMapTest(int initialSize,双加载因子){
this.size=初始大小;
this.loadFactor=loadFactor;
此项为0;
this.array=(K[])新对象[this.size];
this.bucket=(节点[])新对象[this.size];
}
公共静态void main(字符串[]args){
MyHashMapTest a=新的MyHashMapTest();
}
}
您的节点
类不是静态的,这意味着它绑定到外部类的实例。你可以用两种方法来解决这个问题
使用java.lang.reflect.array
创建数组:
this.bucket=(Node[])Array.newInstance(Node.class,this.size)代码>
使嵌套类成为静态类(并向其中添加泛型):
私有静态类节点{
然后,您可以定义所需的泛型类型的bucket
数组:
private Node<K, V>[] buckets;
这回答了你的问题吗?感谢分享链接,实际上我知道如何实例化一个整数数组。我正在尝试实例化一个节点数组(如上所述)。我编辑了我的帖子以更好地反映这一点。this.bucket=new Node[this.size]有什么问题;
?问题是,您不能将基类型的数组强制转换为派生类型的数组。您需要单独强制转换每个元素。您必须使用反射(特别是)以编程方式创建泛型数组。
this.buckets = new Node[this.size];