java中通用数组的变通方法
我有一个作业,我需要制作自己的(简单的)通用链表:java中通用数组的变通方法,java,generics,Java,Generics,我有一个作业,我需要制作自己的(简单的)通用链表: public class Node<T> { private int key; private T data; private Node<T> nextNode; } 公共类节点{ 私钥; 私有T数据; 私有节点nextNode; } 但是我需要实现一个带有哈希表的字典。我想制作一个包含节点的列表。在发生冲突的情况下(两个类型的对象分散到同一个节点,我只是将它们链接到链接列表) 我必须自己实施,
public class Node<T> {
private int key;
private T data;
private Node<T> nextNode;
}
公共类节点{
私钥;
私有T数据;
私有节点nextNode;
}
但是我需要实现一个带有哈希表的字典。我想制作一个包含节点的列表。在发生冲突的情况下(两个类型的对象分散到同一个节点,我只是将它们链接到链接列表)
我必须自己实施,没有外部帮助(已经实施的列表或其他任何东西)
我是如何做到这一点的:
public class GenericDictionary<T> implements GenericDictionary_interface<T> {
private int capacity;
private Node<T> [] slots;
public GenericDictionary () {
this.capacity = 31;
slots = new Node<T>[capacity]; // the array I need which I disperse to
}
}
公共类GenericDictionary实现GenericDictionary\u接口{
私人int能力;
专用节点[]个时隙;
公共通用字典(){
这个容量=31;
slots=new Node[capacity];//我需要分散到的数组
}
}
然而,这并不完全可能。我确实试着阅读了这个主题,试着在这里搜索,所以。。。但我一点也不明白
我唯一的要求是。。。不要懒惰于变量/方法名称,请让它们易于理解。以下是您能做的最好的事情:
@SuppressWarnings("unchecked")
Node<T>[] slots = (Node<T>[]) new Node<?>[capacity];
@SuppressWarnings(“未选中”)
节点[]插槽=(节点[])新节点[容量];
你无法摆脱警告(除了抑制它)。当您需要泛型类的数组时,您需要创建具有未指定泛型类型的数组,然后将其强制转换。所以我将节点类型转换为节点?这样就行了?好吧,有可能适得其反吗?没有。您需要了解,与生成实际实现的C++/C#模板不同,Java泛型只是额外的语法编译时检查和自动插入的强制转换。例如
ArrayList
和ArrayList
是同一个类,甚至是同一个对象。泛型类型仅更改在get()上重新执行元素之前使用的强制转换,在这两种情况下都使用对象数组。另一个帮助您理解Java泛型本质的示例:您可以用10个字符串和1个整数填充列表,将其强制转换为List,只要您不尝试获取()整数元素,列表就会工作(因为get()方法的代码如下return(T)obj_array[idx];
,当实际元素为整数时,这将导致列表中的类强制转换异常。这称为“类型擦除”:好的,我明白。我确实有C/C++的背景,所以我不太明白它是如何工作的,谢谢。@n技术员。如果你必须自己实现这个,没有外部帮助,为什么要问?这不是请求外部帮助吗?@TheBlastOne。通常,如果OP已经尝试了代码,获得一些帮助没有什么错。他作为凯德必须为他写代码。那是错误的。@RohitJain同意。我只是想知道OP是否理解他违反了规则。当然我们对此没有问题。但他应该。我认为他应该质疑规则,因为从外部获得(并接受)暗示或帮助,并接受它,是学习的关键。@Kalec我所说的是a)不要只是违反规则,破坏它!因为b)我同意当你请求正确的帮助时,你没有做错什么。