[英]Dynamic array declaration in java
任何人都可以告訴我這個java聲明中的錯誤String[][] t=new String[15][15];
這工作正常,如果我使用String[][] t=new String[][];
因為我需要將變量t聲明為動態,因為我不確定我將在t中存儲多少值。
使用ArrayList(或可以處理任意數量對象的其他數組對象)。 java數組始終具有固定長度,因為將為該數組保留一些內存。
ArrayList也創建了這樣的數組來存儲對象。 你添加更多的abjects作為數組的當前保留大小比ArrayList將創建一個新的更大的數組(如果我是正確的話,+ 50%)。 還有一些其他實現有點不同(例如,當陣列已滿時,它們會創建一個新陣列100%的原始陣列。如果性能對您來說非常重要,那么您可以查看它。
ArrayList<ArrayList<String> t = new ArrayList<ArrayList<String>();
void fill() {
ArrayList<String> t2 = new ArrayList<String>();
t2.add("somestring");
String s = "someotherstring";
t2.add(s);
t.add(t2);
}
如果您不知道需要多大才能將其聲明為
String[][] t;
一旦你知道它需要多大,你可以做( 在嘗試使用數組之前)
t = new String[15][15];
如果你不確定數組需要多大,你需要使用像List of Lists這樣的東西。
List<List<String>> t = new ArrayList<List<String>>;
public void add(String str, int row, int col) {
while (row >= t.size())
t.add(new ArrayList<String>());
List<String> row_list = t.get(row);
while (col >= row_list.size())
row_list.add("");
row_list.set(col, str);
}
在Java中,數組對象始終具有固定長度。 一旦分配了它們,就無法改變它們的大小。 可以使數組變量指向不同大小的不同數組對象。 所以你可以分配:
String[][] t;
一旦知道大小,它就不會指向一個對象並分配一個對象:
int n1,n2;
// calculate n1,n2
t = new String[n1][n2];
如果你需要一個可以改變大小的結構,你最好使用ArrayList,它可以動態調整大小。
將其聲明為String [][]t = null;
一旦你得到它,並用實際長度 重新初始化它。
t=new String[x][y];
矢量也可以增長:
Vector<Vector<String>> t = new Vector<Vector<String>>();
然后調用Add方法將項添加到向量。
已經有幾個好的答案,但現在已經在Mark Baijens的回答中透露,這個問題的目的是raju需要多值映射的關鍵 。
Mark通過建議raju使用HashMap<String, String> hashMap = new HashMap<String, String>();
跟蹤該評論HashMap<String, String> hashMap = new HashMap<String, String>();
- 但是這僅適用於單個鍵值對。
raju需要的是一個
Map<String, Collection<String>> t
= new HashMap<String, List<String>>();
添加密鑰的第一個值需要為該存儲桶初始化List,而添加其他值則需要獲取現有列表並添加新值。
注意我在聲明中使用了Collection<String>
,因此如果值的順序很重要,它可以是List,也可以是Set,以防止在同一個鍵下重復值。
這可能最好是作為一個類本身實現的
public class MultiValueMap<K, V> extends Map<K, V>
{
...
}
因此,可以在實現中隱藏第一個put(key, value)
和后續.add(value)
列表的初始化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.