我正在尝试使用布谷鸟散列方法创建一个散列函数。当我想要将我的表存储在一个二维数组中时,问题就来了,每一列代表一种散列函数及其索引。当我试图使它更通用时,我也遇到了将表本身设置为通用类型的问题。然而,我找不到任何允许我这样做的东西。
我试着使用这里提到的方法:How to create a generic array in Java?,但是由于我缺乏知识,我不能通过创建一个新的类来使它工作。我也尝试过使用对象数组,直到我需要从对象数组中获取数据,但它拒绝让我将其强制转换为Node,除非我将其包装在一个函数中。这种方式变得混乱,充满了潜在的bug。
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是可用的,但就我的目的而言,这就是我坚持使用的原因
发布于 2019-02-08 01:21:18
不要重用名称;现在你的泛型参数都被称为'Node‘和一个内部类。其次,坚持使用java习惯用法:泛型参数应该是一个大写字母。试试“N”。
您不能创建参数数组。通常,您只需使用'Object‘(这就是ArrayList所做的)。
您链接到的技巧是调用者传入一个表示Node类型的Class引用,但是您没有将其作为参数添加,通常您也不希望这样做。例如,这意味着尝试将List<String>
作为节点是不可能的。
我99%确定你只是想要这里的对象。在必要的地方强制转换为(T),并且不要通过(public)访问器授予对该字段的访问权限,而且您仍然具有类型安全。
https://stackoverflow.com/questions/54578737
复制相似问题