首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中创建泛型2d数组

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

Stack Overflow用户
提问于 2019-02-08 01:11:23
回答 1查看 65关注 0票数 1

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

我试着使用这里提到的方法:How to create a generic array in Java?,但是由于我缺乏知识,我不能通过创建一个新的类来使它工作。我也尝试过使用对象数组,直到我需要从对象数组中获取数据,但它拒绝让我将其强制转换为Node,除非我将其包装在一个函数中。这种方式变得混乱,充满了潜在的bug。

代码语言:javascript
复制
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是可用的,但就我的目的而言,这就是我坚持使用的原因

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-08 01:21:18

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

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

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

我99%确定你只是想要这里的对象。在必要的地方强制转换为(T),并且不要通过(public)访问器授予对该字段的访问权限,而且您仍然具有类型安全。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54578737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档