2013-11-03 63 views
0

塊數組或多維數組變量。出於某種原因,我的應用程序在我的酒吧汽車類加載中丟失了內存。這開始發生在我開始使用Block Arrays時。它適用於實際設備,但不適用於仿真器。有什麼想法嗎?我應該將我的塊數組設置爲實際需要嗎?加載我的酒吧變數時出現Android內存不足

當前塊陣列:

public static String[][] Name = new String[1000][1000]; 

但是我只用也許10左右。該設備是否爲1000的潛力分配空間,並且這就是爲什麼它出錯了?如果是這樣,那麼隨着需求的增長,我該如何使用這些功能,而且我不想對此加以限制。預先感謝您的任何想法。

回答

2

隨着

public static String[][] Name = new String[1000][1000]; 

你分配百萬串(1000×1000),這是一個相當一堆。 If the information on this page is correct each string at least takes 40 bytes,所以在你的情況下大概是39M字節,這對於1次活動來說很容易在堆上留下太多內存。如果你只使用10,我會從那裏開始重構。可能比你的方法更好的解決方案,但沒有關於代碼的更多細節,很難給出它們。但在我的頭頂,爲什麼不使用Set<String>List<String>

編輯:所以在我看來,你只是想要一個動態縮放的集合。對於那個陣列並不是最好的選擇。有許多數據類型的該但一個簡單的例子對子級是ArrayList也使用一個陣列爲後盾的數據類型,但默認會爲10的容量被實例化,並且如果你繼續添加元素

List<String> stringList = new ArrayList<String>(); 
stringList.add("string1"); 
stringList.add("string2"); 
... 

動態擴展如果你想每個元素都有自己的字符串列表只創建一個對象爲:

public class CompoundString { 
    private String key; 
    private List<String> stringList; 
    ... 
} 

,並使用它像這樣

List<CompoundString> compoundStringList = new ArrayList<CompoundString>(); 
compoundStringList.add(new CompoundString("string1", new ArrayList<String>()); 

或者只是使用地圖:

Map<String,List<String>> stringMap = new HashMap<String,List<String>>(); 
stringMap.put("string1", new ArrayList<String>()); 

這是很基本的概念在大多數編程語言,我就開始閱讀有關的各種藏品一些文檔:

+0

感謝您的評論,我是新來的android所以不知道你的意思。然而,你是正確的,我把它切換到10,它加載正常,所以它必須在內存中分配它們,即使我沒有使用它們。你能解釋一下你的意思嗎?設置以及這可以如何幫助我。我想離開它開放式結束,因爲我不知道用戶將輸入多少,我不想限制它們。但我不能這樣做:public static String [] [] Name = new String [] []; – nathan

+0

好吧,我明白了,只是檢查編輯,我想你知道你需要做什麼 – for3st

+0

感謝您的幫助,我已經看到了這一點,但不知道這是你的意思。這將非常感謝你很長的路要走。 – nathan

相關問題