如何在Java中创建泛型类型2d数组

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (181)

我正在尝试使用Cuckoo Hash方法创建一个哈希函数。当我想将表存储在2d数组中时,问题出现了,每列代表一种类型的哈希函数及其索引。当我试图使它更通用时,我也遇到了使表本身成为一般类型的问题。但是我找不到任何允许我这样做的东西。

我试过使用这里提到的方法:如何在Java中创建通用数组? 但是由于我缺乏知识,我无法通过创建一个新类来实现它。我也试过使用Object数组,直到我需要从它获取数据它才会工作,它只是拒绝让我把它转换为Node,除非我把它包装在一个函数中。那种方式变得混乱,充满了潜在的错误

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) ;

基本上,我想要的是桌子是一般类型的二维数组,并以尽可能全面,最干净的方式完成。另外,我知道ArrayList是可用的,但就我的目的而言,这就是我所坚持的

提问于
用户回答回答于

不要重复使用名称; 现在你的泛型参数都被称为“节点”以及内部类。其次,坚持使用java习语:泛型参数应该是单个大写字母。试试'N'。

您不能创建参数数组。通常,您只需使用'Object'(这就是ArrayList所做的)。

您链接的技巧是调用者传入表示Node类型的Class引用,但您没有将其添加为参数,通常您不希望这样做。例如,那意味着尝试采用List<String>节点是不可能的。

我99%肯定你只想要Object [] []。在任何地方转换为(T)并且不通过(公共)访问者授予对该字段的访问权限,并且您仍然具有类型安全性。

扫码关注云+社区

领取腾讯云代金券