2013-10-01 171 views
1

我有一個名爲List(它是一個單鏈表)的實現數據結構。我在我的Java程序以下代碼:初始化填充Java對象數組

List[] Adjacent = new List[N]; // Trying to create an array of N List objects 

假設N = 6,我想Adjacent是六個元素的陣列,其中它們中的每一個是一個List對象本身。但是當我嘗試訪問它時,數組實際上是一個N空引用的數組。到底是怎麼回事?

當然,我做了以下解決我的問題:

for (int p = 0; p < N; p++) 
    Adjacent[p] = new List(); 

但是,這並不是我真正想要的。有沒有更高效/更好的方法來做到這一點?

+6

我會避免類名'List'。它是一個被廣泛使用的界面的名稱... – ppeterka

+0

沒有這樣的東西作爲「空對象」。 – Ingo

+0

@Ingo將其更正爲「指針」 – rodrigoalves

回答

2

當你有

List list; 

這是一個參考,不是對象。有一個對象,你必須創建一個與new List(...)。沒有辦法解決這個問題。您必須初始化對實際對象的引用。 。

而且,差遠了要創建一個類做同樣的事情用一個相似的名字,以已建成的東西,我建議你使用的目錄列表如下:

List<List<String>> listofLists = new ArrayList<>(); 
for(int i = 0; i < N; i++) listOfLists.add(new ArrayList<>()); 

這是更有效地重用現有類。

0

沒有。創建新數組後,您應該手動填寫它。當然,我們有Arrays.fill(array, object)方法,但它會將相同的對象設置爲數組中的所有位置。

0

假設N爲總是 6 ...

List[] l = new List[]{new List(),new List(), 
     new List(),new List(),new List(),new List()}; 
2

將有一個「漂亮」的方式將其與Java 8:

MyObject[] array=Stream.generate(MyObject::new).limit(N).toArray(MyObject[]::new); 

Stream.generate(MyObject::new)將創造無限流由Supplier提供的對象是MyObject的默認構造函數,在我們的例子中,limit(N)顯然限制了對象的數量,並且toArray(MyObject[]::new)將存儲對象cts轉換成由IntFunction<A[]>構成的陣列,該陣列使用指定的int構建陣列,在我們的例子中,該陣列被設置爲相當於new MyObject[i]。該流將爲該i參數提供限制N

儘管最後一部分不是流的真正精神。通常情況下,您會將流引導至處理對象的使用者,並完全忽略數組。