我必须创建一个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 &#34; ArrayList&#34; TO &#34; ArrayList的一个ArrayList&#34;,
但我不能这样做。
完整代码:
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);
}
}
答案 0 :(得分:2)
您无法创建泛型类型的数组。请改用:
ArrayList<Entry>[] bucket = new ArrayList[m];
它显示未经检查的警告,您可以使用@SuppressWarnings("unchecked")
来禁止这样做:
@SuppressWarnings("unchecked")
ArrayList<Entry>[] bucket = new ArrayList[m];
答案 1 :(得分:0)
只有当对象保存的实际对象是arrayList时,才能将对象强制转换为ArrayList。即让我们看下面的代码,
Object obj = new ArrayList<String>(); // object variable holding array list type.
ArrayList<String> arr = (ArrayList<String>) obj;