【问题标题】:How to dynamically initialize the size of an array of linked lists java [closed]如何动态初始化链表数组的大小java [关闭]
【发布时间】:2013-04-29 19:18:18
【问题描述】:

我有一个构造函数,它指定我的链表数组应该有多大,但我在初始化数组大小时遇到​​了麻烦。这是我正在尝试的,但每当我尝试初始化数组时都会出错:

//构造函数

MyConstruct(int initSize){
    hashTable = (LinkedList<T>[]) new Object[initSize];
}

错误: java.lang.对象;无法转换为 [Ljava.util.LinkedList;

如何创建一个链表数组,我可以在其中执行以下操作:

for(int i = 0; i < hashTable.size(); i++){
    hashTable[i].add(i + i);
}

【问题讨论】:

    标签: java generics casting linked-list hashtable


    【解决方案1】:

    试试这个

    @SuppressWarnings("unchecked")
    MyConstruct(int initSize){
        hashTable = new LinkedList[initSize];
        for(int i = 0; i < initSize; i++) {
            hashTable[i] = new LinkedList();
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果T 是您的类MyConstruct&lt;T&gt; 中的通用参数,那么您将无法创建LinkedList&lt;T&gt; 的数组。类型擦除会在运行时将其变为LinkedList[],并且没有好的方法可以添加代码来检查是否将正确类型的LinkedList 添加到数组中。

      不要混淆数组和泛型。相反,请改用List&lt;LinkedList&lt;T&gt;&gt;。那应该可以正常工作。但是,您的链表列表的目的是什么?来自 Google Guava 的 MultiMap 会更好吗?

      【讨论】:

        【解决方案3】:

        如果您想将数组更改为列表,您可以这样做: Arrays.asList(数组)

        【讨论】:

        • 这不能回答问题。
        【解决方案4】:

        This would work:

        MyConstruct(int initSize){
            hashTable = new LinkedList[initSize];
        }
        

        但实际上,只需使用列表列表!

        MyConstruct(int initSize){
            hashTable = new LinkedList<LinkedList<T>>();
        }
        

        【讨论】:

        • 或避免原始类型:hashTable = (LinkedList&lt;T&gt;[])new LinkedList&lt;?&gt;[initSize];
        猜你喜欢
        • 1970-01-01
        • 2013-01-20
        • 2015-07-28
        • 1970-01-01
        • 2016-12-21
        • 2013-04-11
        • 2021-06-21
        • 1970-01-01
        • 2011-10-30
        相关资源
        最近更新 更多