gpt4 book ai didi

java - 在Java中初始化私有(private)对象数组

转载 作者:行者123 更新时间:2023-12-02 09:13:38 25 4
gpt4 key购买 nike

为了给您提供一些背景信息,我正在尝试使用 Java 从头开始​​构建 HashMap。

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

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

最佳答案

您的Node类不是静态的,这意味着它绑定(bind)到外部类的实例。您可以通过两种方式解决这个问题。

  1. 使用 java.lang.reflect.Array 创建数组:

this.buckets = (Node[]) Array.newInstance(Node.class, this.size);

  • 创建您的嵌套类 static (并向其中添加泛型):
  • private static class Node<A, B> {

    然后您可以定义您的 buckets您需要的泛型类型的数组:

    private Node<K, V>[] buckets;

    然后你就可以“正常”实例化你的数组:

    this.buckets = new Node[this.size];

    关于java - 在Java中初始化私有(private)对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59183231/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com