创建一个存储Generic类型对象的ArrayList数组

时间:2016-12-26 07:18:51

标签: java arrays generics arraylist

我必须创建一个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);
    }
}

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;