【发布时间】:2017-05-10 17:06:34
【问题描述】:
我必须创建一个 ArrayList 数组来存储泛型类型的对象。
ArrayList<Entry>[] bucket;
当我将其初始化为
bucket=(ArrayList<Entry>[])new Object[m];
我在运行时得到 java.lang.ClassCastException。
Entry 类使用泛型。下面是代码:
class Entry<K,V>{
K key;
V value;
public Entry(K key,V value){
this.key=key;
this.value=value;
}
在阅读了几篇关于为什么 Array of Objects 不能转换为泛型类型的 ArrayList 的帖子之后,我明白了我的问题。但是我无法解决这个问题来解决我的特殊情况。
涉及的一些解决方案:
改变它 FROM "一个 ArrayList 的数组" TO "一个 ArrayList 的 ArrayList",
但就我而言,我不能这样做。
完整代码:
import java.util.ArrayList;
class MyHashMap<K,V> {
int m;
int loadFactor;
int n;
ArrayList<Entry>[] bucket;
public MyHashMap(){
this(10,2);
}
public MyHashMap(int m){
this(m,2);
}
public MyHashMap(int m,int loadFactor){
this.m=m;
this.loadFactor=loadFactor;
n=0;
bucket=(ArrayList<Entry>[])new Object[m];
}
class Entry{
K key;
V value;
public Entry(K key,V value){
this.key=key;
this.value=value;
}
public int hashCode(){
return 0;
}
}
public void put(K key, V value){
Entry entry=new Entry(key,value);
int hash=entry.hashCode();
int index=hash%m;
bucket[index].add(entry);
}
public static void main(String[] args) {
MyHashMap hashMap=new MyHashMap();
hashMap.put("faisal",2);
}
}
【问题讨论】:
-
为什么要创建一个名为
Entry的类,它看起来与 Java 的Map.Entry非常相似? -
为什么你认为可以将
Object数组转换为ArrayList<Entry>数组? -
请在您计划使用此
ArrayList的上下文中显示代码。 -
多态类型声明不适用于集合。类型应该是精确类型。它不能是父类型或子类型。但这与数组不同。
Entry[] bucket=new Object[m]; -
@Tim 我实际上是在这里实现 HashMap,并且我正在使用链接。
标签: java arrays generics arraylist