如何在Java中生成泛型2d数组

如何在Java中生成泛型2d数组,java,hash,computer-science,Java,Hash,Computer Science,我正在尝试使用布谷鸟哈希方法生成一个哈希函数。当我想将我的表存储在2d数组中时,问题就来了,每列代表一种类型的哈希函数及其索引。当我试图使它更通用时,我也遇到了使表本身成为通用类型的问题。然而,我找不到任何允许我这样做的东西 我尝试使用这里提到的方法: 但是由于我缺乏知识,我无法通过创建一个新的类来实现它。我也尝试过使用对象数组,它一直工作到我需要从中获取数据,它只是拒绝让我将其强制转换到节点,除非我将其包装到函数中。这条路变得杂乱无章,充满了潜在的漏洞 class CuckooHash<

我正在尝试使用布谷鸟哈希方法生成一个哈希函数。当我想将我的表存储在2d数组中时,问题就来了,每列代表一种类型的哈希函数及其索引。当我试图使它更通用时,我也遇到了使表本身成为通用类型的问题。然而,我找不到任何允许我这样做的东西

我尝试使用这里提到的方法: 但是由于我缺乏知识,我无法通过创建一个新的类来实现它。我也尝试过使用对象数组,它一直工作到我需要从中获取数据,它只是拒绝让我将其强制转换到节点,除非我将其包装到函数中。这条路变得杂乱无章,充满了潜在的漏洞

class CuckooHash<Key, Node> {
    class Node{ // Node of a hash to store  key and value
        Key key ;
        Value value ;
    }
    int capacity ;
    Node[][] table = (Node[][]) Array.instanceOf(new Class<Node[]>, capacity ) ; // I tried to mimic C  dynamic array base on what I was able to grapsh
    table = (Node []) Array.instanceOf(new Class<Node>, capacity) ;
布谷鸟类{
类节点{//散列的节点,用于存储键和值
钥匙;
价值观;
}
国际能力;
Node[][]table=(Node[][])Array.instanceOf(new Class,capacity);//我试图根据我能够绘制的图形模拟C动态数组
table=(Node[])Array.instanceOf(新类,容量);

基本上,我想要的是让表成为一个具有常规类型的2d数组,并以一种全面、干净的方式完成它。顺便说一句,我知道ArrayList是可用的,但出于我的目的,这就是我一直坚持的,不要重复使用名称;现在,泛型参数和内部类都被称为“Node”。其次,坚持使用th java习语:泛型参数应该是一个大写字母。请尝试使用“N”

您不能创建参数数组。通常,您只需使用“对象”(ArrayList就是这样做的)

链接的技巧是调用方传入表示节点类型的类引用,但您没有将其作为参数添加,通常您不想这样做。例如,这意味着尝试将
列表
作为节点是不可能的


我99%确定您只想在此处使用对象[]。在任何需要的地方强制转换到(T),并且不通过(公共)授予对此字段的访问权限访问器,您仍然具有类型安全性。

不要重用名称;现在,您的泛型参数和内部类都被称为“Node”。其次,请坚持使用java习惯用法:泛型参数应该是一个大写字母。请尝试使用“N”

您不能创建参数数组。通常,您只需使用“对象”(ArrayList就是这样做的)

链接的技巧是调用方传入表示节点类型的类引用,但您没有将其作为参数添加,通常您不想这样做。例如,这意味着尝试将
列表
作为节点是不可能的


我99%确定您只需要在此处使用对象[]。在任何需要的地方强制转换为(T),并且不通过(公共)访问器授予对此字段的访问权限,您仍然具有类型安全性。

您是否建议如何强制转换,以便我不必编写包装函数。我尝试了(类型)但不管出于什么原因,它都不起作用。我想我在这里遗漏了一些东西,但我让它起作用的唯一方法是通过一个函数返回节点类型的对象,而且我是新的,在Java中没有经验,因此我讨厌一个类,我将尝试改进您的advisepublic类MyArrayList{Object[]elems;public E get(int idx){return(E)elems[i];}这很好用,不过您必须在get方法上禁止不安全的强制转换警告。我希望找到一种完全不必使用函数的方法。您能建议如何强制转换它,这样我就不必编写包装器函数了。我尝试了(Type)但不管出于什么原因,它都不起作用。我想我在这里遗漏了一些东西,但我让它起作用的唯一方法是通过一个函数返回节点类型的对象,而且我是新的,在Java中没有经验,因此我讨厌一个类,我将尝试改进您的advisepublic类MyArrayList{Object[]elems;public E get(int idx){return(E)elems[i];}这很好用,不过您必须在get方法上禁止不安全的强制转换警告。我希望找到一种完全不需要使用函数的方法