我一直對ArrayLists的數組有這個問題。也許你可以幫忙。關於ArrayList的Java問題<Integer> [] x
//declare in class
private ArrayList<Integer>[] x;
//in constructor
x=new ArrayList[n];
這會生成關於未檢查轉換的警告。
但
x=new ArrayList<Integer>[n];
是一個編譯器錯誤。
有什麼想法?
謝謝!
我一直對ArrayLists的數組有這個問題。也許你可以幫忙。關於ArrayList的Java問題<Integer> [] x
//declare in class
private ArrayList<Integer>[] x;
//in constructor
x=new ArrayList[n];
這會生成關於未檢查轉換的警告。
但
x=new ArrayList<Integer>[n];
是一個編譯器錯誤。
有什麼想法?
謝謝!
你不能讓泛型列表的數組。幸運的是,有解決方法。更值得慶幸的是,有一個關於Generics的好網站,它提供了比你想知道的更多信息。鏈接直接到Java Generics部分的數組中。
我認爲你不能做通用的ArrayList數組,因爲沒有通用的信息將可在runtime.Instead你可以這樣做:
List<Integer>[] arr=new ArrayList[30];
arr[0]=new ArrayList<Integer>();//create new arraylist for every index.
ArrayList<?>[] x;
x=(ArrayList<? extends Integer>[]) new ArrayList<?>[10];
x[0] = new ArrayList(1);
運行流動代碼:
public class Test {
ArrayList<Long>[] f0;
ArrayList<Long> f1;
ArrayList[] f2;
public static void main(String[] args) {
Test t = new Test();
Field[] fs = t.getClass().getDeclaredFields();
for(Field f: fs){
System.out.println(f.getType().getName());
}
}
}
您將獲得:
[Ljava.util.ArrayList;
java.util.ArrayList
[Ljava.util.ArrayList;
由於Java不支持通用陣列。當你聲明:
private ArrayList<Integer>[] x;
編譯器會認爲它是:
private ArrayList[] x;
所以,你應該做的那樣:
int n = 10;
ArrayList<Long>[] f = new ArrayList[n];
for(int i=0;i<n;i++){
f[i] = new ArrayList<Long>();
}
應該不會是一個錯誤。警告就足夠了。如果沒有人能夠創建ArrayList<Integer>[]
,那麼確實沒有意義。
由於javac還沒有做我們的青睞,我們可以創建數組自己:
@SuppressWarnings("unchecked")
<E> E[] newArray(Class<?> classE, int length)
{
return (E[])java.lang.reflect.Array.newInstance(classE, length);
}
void test()
ArrayList<Integer>[] x;
x = newArray(ArrayList.class, 10);
的類型約束不健全,調用者應該確保確切類傳入的好消息。如果傳入了錯誤的類,則在將結果分配給x
時會立即發生運行時錯誤,因此失敗很快。
關於泛型和數組,有很多關於SO的問題和答案。 – extraneon 2011-03-11 11:25:05
爲什麼不試試列表<列表>? –
2011-03-11 11:26:48
這並不完全回答你的問題,但你正在嘗試使用ArrayLists數組,所以你可能更適合使用Integer數組的LinkedList。 – atx 2011-03-11 11:39:32