实例化通用类数组

时间:2014-04-29 06:08:54

标签: java generics collections

如何实例化通用类array对象?

我在Java中实现了哈希表

要实例化的通用类

class GenericLinkedList<T> {
   // Generic Class Codes Here
}

哈希表类:

public class HashTable {

    private GenericLinkedList[] table;     // Generic Class Instantiation
    private static final int SIZE = 50;

    public HashTable() {
        this.table = new GenericLinkedList[SIZE];
        for(int i = 0; i < SIZE; i++)
            this.table[i] = new GenericLinkedList();
    }
}

3 个答案:

答案 0 :(得分:2)

您无法创建泛型类型的数组。以下代码无效:

List<String>[] listArray = new List<String>[10];  // Error

最好在内部使用Object[]来存储元素,让返回元素的方法做适当的强制转换:

public class HashTable<T> {

    private Object[] table;  
    private static final int SIZE = 50;

    public HashTable(){
        this.table = new Object[SIZE];
        for(int i = 0; i < SIZE; i++)
            this.table[i] = new GenericLinkedList();
    }
}

仅供参考,这就是java.util.ArrayList的实施方式。

P.S。:为什么你的Hashtable似乎没有键值映射的东西?这更像是一个清单。

答案 1 :(得分:0)

首先,您发布的代码没有任何问题。您可能希望tableGenericLinkedList<T>[]。解决方案很简单,在创建阵列时,请使用new GenericLinkedList[SIZE]new GenericLinkedList<?>[SIZE]

public class HashTable<T> {

    private GenericLinkedList<T>[] table;  
    private static final int SIZE = 50;

    public HashTable(){
        this.table = new GenericLinkedList[SIZE];
        for(int i = 0; i < SIZE; i++)
            this.table[i] = new GenericLinkedList();
    }
}

public class HashTable<T> {

    private GenericLinkedList<T>[] table;  
    private static final int SIZE = 50;

    public HashTable(){
        this.table = (GenericLinkedList<T>[])new GenericLinkedList<?>[SIZE];
        for(int i = 0; i < SIZE; i++)
            this.table[i] = new GenericLinkedList();
    }
}

答案 2 :(得分:-1)

为什么不是你的HashTable通用本身? HashTable<T>很好地解决了你的问题:

this.table = new GenericLinkedList<T>[SIZE];

您也可以使用GenericLinkedList<?>