2016-01-25 55 views
1

我想使用Eclipse製作動態程序。對於這個程序,我需要定義幾個(實際上太多〜200個)集合。我研究並發現,我可以使用ArrayLists來存儲整數。用Java初始化ArrayList的可變數量

在我試圖解決的問題中,有T(T是任何整數)我需要創建許多不同的ArrayList。我需要定義一個獨特的ArrayList爲T的每一個值例如,對於T = 3我需要定義三種不同的ArrayList,我將能夠存儲整數爲每一個不同的索引:

ArrayList T1 = new ArrayList(); 

ArrayList T2 = new ArrayList(); 

ArrayList T3 = new ArrayList(); 

問題這裏是我無法確定如何像T一樣定義許多ArrayLists。我試圖創建一個「for循環」來初始化這些變量,但是正如我預料的那樣,它變得不好(僅僅因爲我需要不同每個ArrayList的名稱和我不能改變每個ArrayList的名稱)我確信它不會工作(或者至少我確信我做錯了,即使有辦法做到這一點 - 我不能通過在互聯網上搜索找到),但只是想知道我正在嘗試做什麼,代碼如下所示:

for (int i=1; i<T; i++) { 
    ArrayList T+i = new ArrayList(); //I tried to vary the name of the arraylist by adding the variable "i" next to T. 
} 

在上面的代碼中,我無法實現爲ArrayLists定義索引,但請注意,如果我們可以通過向ArrayLists添加索引來完成此操作,這將非常方便。

由於這是我第一次嘗試動態編程,所以我有點失落,我感謝您的幫助!提前致謝。

+0

所以,如果我正確地理解你的問題,你需要創建任意數量的ArrayLists,然後你將使用索引在這些ArrayLists中進行選擇? –

+0

是的,我會嘗試在需要索引的問題中更加清楚。謝謝! –

回答

1

您的問題的解決方案之一是創建ArrayList的ArrayList。例如,

ArrayList<ArrayList<Integer>> listOfLists = new ArrayList<>(); 

然而,如果你使用舊的JDK,你可能需要使用:

ArrayList<ArrayList<Integer>> listOfLists = new ArrayList<ArrayList<>>(); 

然後你就可以在必要時對它們進行初始化:

for (int i=0; i<T; i++) { 
    listOfLists.add(new ArrayList()); 
} 

,並使用它們,如:

ArrayList<Integer> firstList = listOfLists.get(0); 

對於多d imensional ArrayList的

HashMap<Integer, ArrayList<ArrayList<Integer>>> map = new HashMap<>(); 
for (int i=0; i<T; i++) { 
    map.put(i, new ArrayList<ArrayList<Integer>>()); 
} 
ArrayList<ArrayList<Integer>> tempList = map.get(0); 
} 

我希望幫助。

+0

你也可以像@Ruthi Ruth所建議的那樣傳遞數組列表的大小作爲參數 –

+0

謝謝你的回答!現在我的想法更清晰了。是否也可以向ArrayLists添加第二個索引?我是否需要在對方內定義三個ArrayLists來實現第二個索引? –

+0

你的意思是像一個二維數組列表? –

0

如果我理解正確的話,你要列出清單,如:

int T = 10; 
ArrayList<ArrayList<Integer>> array = new ArrayList<>(T); 
for(int i = 0; i < T;i++){ 
     array.add(new ArrayList<>()); 
} 

array.get(i),你可以得到你的具體名單,以填補你的目的。

+0

感謝您的回答。你認爲可以將這個解決方案應用於兩個索引的情況嗎?說,如果我們需要使用兩個索引(i和j)而不是僅僅創建我們的ArrayList? –

0

相反迭代的名字,你可以簡單地使含有名作爲關鍵字和ArrayList作爲價值的獨特地圖:

HashMap arrayMap = new HashMap(); 
for(int i = 0; i< 200; i++){ 
    arrayMap.put("T"+i, new ArrayList()); 
} 

編輯 回答你的問題:

int MAX_Y = 100; 
int MAX_X = 100; 
HashMap<K, V> arrayMap = new HashMap(); 
for(int i = 0; i< MAX_X; i++){ 
    for(int x = 0; x < MAX_Y; x++){ 
     arrayMap.put("T_"+i+"_"+x, new ArrayList()); 
    } 
} 

//To retrive array 
arrayMap.get("T_15_20"); 
+0

感謝您的替代答案,在我的情況下,這個解決方案可能會更方便一些。我從來沒有嘗試過在Java中使用地圖。你認爲可以在上面的代碼中添加第二個索引嗎?我猜測你的代碼之外的另一個循環可能會完成這項工作嗎? 如何在這種情況下稍後調用數組列表? –

+0

@StoryMaths當然,請閱讀我的編輯。 – kunpapa

+0

非常感謝你的回答。這可能對我來說工作得很好。我試圖在我的問題中實現代碼,但變量K和V似乎導致錯誤,即使我初始化它們(作爲整數)。我需要用另一種類型初始化它們嗎?抱歉有人用問題轟炸你,這是我第一次使用HashMap--這就是爲什麼我猶豫不決。 –

0

燦你試試這個代碼

int T=10; 
    ArrayList[] arrayLists = new ArrayList[T]; 
    for(int i=0;i<arrayLists.length;i++){ 
     arrayLists[i] = new ArrayList(); 
    } 

您可以稍後訪問任何ArrayList作爲arrayLists [i],我將成爲列表編號。

0

如果你想存儲每一個鍵2D列表,你可以使用ListMultimap from Guava

final ListMultimap<Integer, List<Integer>> map = ArrayListMultimap.create(); 
map.put(7, Arrays.asList(1, 2, 3)); 
map.put(7, Arrays.asList(4, 5, 6)); 
map.put(1, Arrays.asList(9)); 

System.out.println(map); // prints '{1=[[9]], 7=[[1, 2, 3], [4, 5, 6]]}' 

另外,如果你想每個鍵只有一個列表,你可以做到以下幾點:

final List<List<Integer>> list = new ArrayList<>(); 
list.add(Arrays.asList(1, 2, 3)); 
list.add(Arrays.asList(4, 5, 6)); 

System.out.println(list); // prints '[[1, 2, 3], [4, 5, 6]]'