2012-10-17 165 views
2

當我在Java中使用Array列表時碰到一個小問題。基本上我希望能夠將數組存儲在數組列表中。我知道數組列表可以容納對象,所以它應該是可能的,但我不知道如何。在arraylist中存儲對象

在大多數情況下我的ArrayList(從文件中解析)只是抱着一個字符的字符串,但過一段時間它有一系列字符,像這樣:

myarray 
0 a 
1 a 
2 d 
3 g 
4 d 
5 f,s,t 
6 r 

最當時我在位置5處的字符串中唯一關心的字符是f,但偶爾我可能需要查看s或t。我的解決方案是製作一個這樣的數組:

 subarray 
0  f 
1  s 
2  t 

並將子數組存儲在位置5中。

myarray 
0 a 
1 a 
2 d 
3 g 
4 d 
5 subarray[f,s,t] 
6 r 

我試着用這個代碼要做到這一點:

//for the length of the arraylist 
for(int al = 0; al < myarray.size(); al++){ 
     //check the size of the string 
     String value = myarray.get(al); 
     int strsz = value.length(); 
     prse = value.split(dlmcma); 
     //if it is bigger than 1 then use a subarray 
     if(strsz > 1){ 
      subarray[0] = prse[0]; 
      subarray[1] = prse[1]; 
      subarray[2] = prse[2]; 
     } 
     //set subarray to the location of the string that was too long 
     //this is where it all goes horribly wrong 
     alt4.set(al, subarray[]); 
    } 

這不是工作,我想雖然的方式。它不會讓我.set(int,array)。它只允許.set(int,string)。有沒有人有建議?

+0

是什麼ALT4(對象的聲明)? – amphibient

+0

你知道String是一個char []方法,對嗎?只需使用列表,其值爲「a」或「fst」,如果您感興趣的是單個字符,則不需要分隔符和分割。 –

回答

2

最簡單的方法是創建ArrayList的ArrayList。

ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>(); 

但是,這可能不是最好的解決方案。您可能想重新考慮您的數據模型並尋找更好的解決方案。

+0

是的。我今天會重新考慮它。謝謝 – Stephopolis

0

只要改變alt4.set(al, subarray[]);

  alt4.add(subarray); 

我認爲alt4是另一個定義ArrayList<String[]>。如果不是,如下定義它:

 List<String[]> alt4= new ArrayList<String[]>(); 

 ArrayList<String[]> alt4= new ArrayList<String[]>(); 
0

我的猜測是,您聲明ALT4爲List<String>,這就是爲什麼它不會讓你設置一個String數組作爲列表元素。您應該將其聲明爲List<String[]>,並且每個元素都是單數,在將它添加到列表之前,只需將它設置爲String []數組的第0個元素即可。

0

你可以切換到:

List<List<Character>> alt4 = new ArrayList<List<Character>>(); 
0

可能這是你想要得到什麼

public class Tester { 

    List<String> myArrays = Arrays.asList(new String[] { "a", "a", "d", "g", "d", "f,s,t", "r" }); 

    ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>(); 

    private void manageArray() { 
     // for the length of the arraylist 
     ArrayList<String> subarray = new ArrayList<String>(); 
     for(int al = 0; al < myArrays.size(); al++) { 
      // check the size of the string 
      String value = myArrays.get(al); 
      int strsz = value.length(); 
      String prse[] = value.split(","); 
      // if it is bigger than 1 then use a subarray 
      if(strsz > 1) { 
       for(String string : prse) { 
        subarray.add(string); 
       } 
      } 
      // set subarray to the location of the string that was too long 
      // this is where it all goes horribly wrong 
      alt4.set(al, subarray); 
     } 

    } 
}