2015-10-22 105 views
3

我是新來編碼。我的老師最近介紹了陣列和陣列列表。我有一個多維陣列是這樣的:使用值初始化多維ArrayList

private String[][] pods = {{"pod1", ""}, {"pod2", ""}, {"pod3", ""}, {"pod4", ""}}; 

我想此切換到一個ArrayList,因爲我需要在存在編輯信息。

我該怎麼做,但是使用多維ArrayList?我想用上面的信息初始化它。

我已經試過這樣:

private ArrayList<ArrayList<String>> pods = new ArrayList(); 

每當我把括號之間的東西,我得到一個無效的操作錯誤。

順便說一句,以防萬一有人想知道 - 這不是班級作業。這是我自己嘗試的。

謝謝。

回答

0

你可以嘗試先建立內部的ArrayList,然後用pods.add將項目添加到您的pods的ArrayList:

// create your initial ArrayList 
private ArrayList<ArrayList<String>> pods = new ArrayList<ArrayList<String>>(); 

// create an ArrayList<String> to add to it 
private ArrayList<String> list1 = new ArrayList<String>(); 
list1.add("foo"); 

// create another 
private ArrayList<String> list2 = new ArrayList<String>(); 
list2.add("bar"); 

// add the inner ArrayLists to your main ArrayList 
pods.add(list1); 
pods.add(list2); 
2

首先,你的做法是半正確的。

對於二維數組,您可以有ArrayListArrayList s。

但是......

你初始化你的List原始類型。從Java 7,你可以改變你分配一個鑽石型的推斷:

List<List<String>> pods = new ArrayList<>(); 

在早期版本:

List<List<String>> pods = new ArrayList<List<String>>(); 

您還需要填充您的列表。

爲此,您需要一些迭代。

這是一個完整的Java 7示例(使用List作爲「代碼到接口」指南建議)。

String[][] info = {{"pod1", ""}, {"pod2", ""}, {"pod3", ""}, {"pod4", ""}}; 
List<List<String>> pods = new ArrayList<>(); 
for (String[] level1: info) { 
    List<String> list = Arrays.asList(level1); 
    // use this instead if you intend to modify the inner lists 
    // List<String> list = new ArrayList<>(Arrays.asList(level1)); 
    pods.add(list); 
} 
System.out.println(pods); 

輸出

[[pod1, ], [pod2, ], [pod3, ], [pod4, ]] 

現在,一些Java 8魔力:

String[][] info = {{"pod1", ""}, {"pod2", ""}, {"pod3", ""}, {"pod4", ""}}; 
List<List<String>> pods = 
    Arrays.stream(info) 
     .map((a) -> Arrays.asList(a)) 
     // use this instead if you intend to modify the inner lists 
     // .map((a) -> Arrays.stream(a).collect(Collectors.toList())) 
     .collect(Collectors.toList()); 
System.out.println(pods); 

(相同)輸出

[[pod1, ], [pod2, ], [pod3, ], [pod4, ]] 
+0

'Arrays.asList'返回固定大小'List'。我相信你不能使用這個解決方案將元素附加到內部'List'。 –

+0

@ManosNikolaidis這是真的,雖然不是對原始問題的要求。最簡單的解決方案是將我的猜測包裝在構造函數中。 – Mena

0

您只需在數組上迭代並將項添加到列表中即可。 當您完成一行時,只需將列表添加到主列表。

List<List<String>> list = new ArrayList<List<String>>(); 
for (int i = 0 ; i < rowsCount ; i++) 
{ 
    List<String> temp = new ArrayList<String>(); 
    for (int j = 0 ; j < colsCount ; j++) 
    temp.add (arr[i][j]); 
    list.add (temp); 

} 

,或者你可以如下操作:

for (int i = 0 ; i < rowsCount ; i++) 
{ 
    list.add (Arrays.asList(arr[i])); 
} 

但是使用第二種方法可以防止你在任何索引

+0

單獨的代碼被認爲是低質量的答案。你應該指出爲什麼這回答OP的問題 –

1

擴大各列表項如果你絕對要一個一個襯裏就像你使用陣列時一樣,你可以使用這個「單線」(你還需要import static java.util.Arrays.asList;):

List<List<String>> pods = new ArrayList<>(asList(
    new ArrayList<>(asList("pod1", "")), 
    new ArrayList<>(asList("pod2", "")), 
    new ArrayList<>(asList("pod3", "")), 
    new ArrayList<>(asList("pod4", "")) 
)); 
+0

我不認爲你需要所有新的ArrayList <>位 - 你可以用asList()位來完成。此外,大多數情況下,您不應該在代碼中引用ArrayList。 –

+0

不幸的是'asList'返回一個固定的大小'ArrayList'。如果需要在初始化後添加元素,則需要使用複製構造函數來創建「正確的」可調整大小的列表。否則,它會簡化很多事情。 –

+0

並且OP確實提到需要編輯列表中的數據,所以足夠公平 –