Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中初始化私有对象数组_Java_Arrays_Generics - Fatal编程技术网

在Java中初始化私有对象数组

在Java中初始化私有对象数组,java,arrays,generics,Java,Arrays,Generics,为了让您了解一下上下文,我正在尝试使用Java从头构建一个HashMap 当我试图实例化一个节点数组(如下定义的私有类)时,我遇到了一些问题。我只想先实例化数组(在构造函数中),然后更新相同的数组(在尚未实现的方法中) 请在下面找到复制错误和错误消息的代码。为什么行this.array=(K[])新对象[this.size]工作,行this.bucket=(节点[])新对象[this.size]不起作用 这在Java中是可以实现的,还是应该完全重新思考逻辑 public class MyHash

为了让您了解一下上下文,我正在尝试使用Java从头构建一个HashMap

当我试图实例化一个节点数组(如下定义的私有类)时,我遇到了一些问题。我只想先实例化数组(在构造函数中),然后更新相同的数组(在尚未实现的方法中)

请在下面找到复制错误和错误消息的代码。为什么行
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];