小编典典

Java泛型:包含泛型的数组

java

我的任务是用Java编写哈希表,该哈希表必须适用于任何数据类型。我正在编写的代码规则如下:-哈希表必须具有一个数组作为基础数据结构,其大小在构造对象时确定-
发生冲突时,应该放置碰撞的元素链接列表,该列表包含哈希表中该索引(键)处的所有元素

因此,对于基础数据类型,我做了一个LinkedList类型的数组(自定义,不是Java API LinkedList)。

private LinkedList<T>[] table;

当然,问题是实例化此数组。这是我的一些尝试:

public HashTable(int size) {
  table = new LinkedList<T>[size];
}

这将引发编译时通用数组创建错误。

public HashTable(int size) {
  table = (LinkedList<T>[])(new Object[size]);
}

这会ClassCastException在运行时导致错误(java.lang.Object无法转换为LinkedList)。

项目负责人也不确定如何处理此问题。有什么办法可以更改我的代码,以使哈希表仍然具有数组作为其基础数据结构,并且冲突位于LinkedList中?


阅读 221

收藏
2020-11-16

共1个答案

小编典典

这对我有用:

public class HashTable<T> {

    private LinkedList<T> table[];

    @SuppressWarnings("unchecked")
    public HashTable(int size) {
        table = new LinkedList[size];
    }

}

例如:

HashTable<String> t = new HashTable<String>(10);
t.table[0] = new LinkedList<String>();
t.table[0].add("test");
System.out.println(t.table[0].get(0));

是的,构造函数生成了一个警告(说明“ unchecked”注释),但是此后代码可以正常工作而没有更多警告。

2020-11-16