2012-05-26 92 views

回答

4
final String[][] r = new String[childrenSuperList.size()][]; 
int i = 0; 
for (ArrayList<String> l : childrenSuperList) 
    r[i++] = l.toArray(new String[l.size()]); 
+0

为什么不使用'对(INT I = 0; I

+2

@NikitaBeloglazov模拟?我**在源'ArrayList'上迭代**,并追踪目标数组中的索引。这是最短和最干净的代码。为什么我想用丑陋的'childrenSuperList.get(i)'代替? –

+0

我只是觉得索引是错误的,这个逃逸的循环可以在循环之外访问。在for(int i'''')循环中,我们将列表的第i个元素设置为数组的第i个元素将更加明显。是的,它更加冗长,但我认为在某些方面它更清晰。 –

0

二维数组列表有有字符串数组从ArrayList中的方法:

ArrayList listArray = new ArrayList(); 

listArray.add("One"); 
listArray.add("Two"); 
listArray.add("Three"); 

String []strArray = new String[3]; 
listArray.toArray(strArray); 
0

以下代码将帮助您获得完美的完整结果。

public static void main(String[] args) { 

    ArrayList<ArrayList<String>> val = new ArrayList<ArrayList<String>>(); 
    int arraySize = 0; 
    int upperSize = 0; 

    if (val != null) { 
     ArrayList<String> arrayList = val.get(0); 
     upperSize = val.size(); 
     if (arrayList != null) { 
      arraySize = arrayList.size(); 
     } 
    } 

    int i = 0, j = 0; 
    String[][] values = new String[upperSize][arraySize]; 
    if (val != null) { 
     for (ArrayList<String> curr : val) { 
      if (curr != null) { 
       for (String currValue : curr) { 
        values[i][j++] = currValue; 
       } 
       i++; 
      } 
     } 
    } 

} 
+0

这个假定所有的内部列表都是相同的大小,这可能不是真的。 –

+0

@Paul在这个问题上,它没有明确提及关于这一点,因此我做了这个。 –

+1

@BhavikAmbani这似乎是一个非常大的假设,t帽子几乎肯定会变成错误的。如果能够在不这样做的情况下解决问题是可能的,那么编写代码依赖于真实是很愚蠢的。 –

2

您的列表可以有不同的大小,所以表不会有固定的大小,但这是没有问题的。

ArrayList<ArrayList<String>> childrenSuperList = new ArrayList<ArrayList<String>>(); 
// put some data 
ArrayList<String> a = new ArrayList<>(); 
a.add("a1"); 
a.add("a2"); 
ArrayList<String> b = new ArrayList<>(); 
b.add("b1"); 
b.add("b2"); 
b.add("b3"); 

childrenSuperList.add(a); 
childrenSuperList.add(b); 

// you need to know sizes of array 
String[][] array = new String[childrenSuperList.size()][]; 
int i = 0, j = 0; 
for (ArrayList<String> row : childrenSuperList) { 
    array[i] = new String[row.size()]; 
    j = 0; 
    for (String str : row) { 
     array[i][j] = str; 
     j++; 
    } 
    i++; 
} 
System.out.println(Arrays.deepToString(array)); 
+0

此代码可能会抛出'NullPointerException'。 –

+0

什么时候可以抛出'NullPointerException'?我知道'childrenSuperList'被初始化了。即使列表为空也没关系。 – Pshemo

+0

我认为*他说'childrenSuperList'可能包含'null'元素,这是一个极端的IMO。你的回答对我来说似乎很好。 –

0
import java.util.*; 

公共类的HelloWorld {

public static void main(String []args){ 

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

    ArrayList<String> list=new ArrayList<String>(); 
    list.add("Joshan Stethem"); 
    list.add("Bruce Wills"); 
    list.add("Tom Cruse"); 
    list.add("Optimus Prime"); 
    System.out.println("Array List Hollywood : "+list); 
    ArrayList<String> list1=new ArrayList<String>(); 
    list1.add("Salman Khan"); 
    list1.add("Shahrukh Khan"); 
    list1.add("AMir Khan"); 
    list1.add("Fawad Khan"); 
    System.out.println("Array List Bollywood : "+list1); 
     ArrayList<String> list2=new ArrayList<String>(); 
    list2.add("Rahat Fateh"); 
    list2.add("Arijit Singh"); 
    list2.add("KK"); 
    list2.add("Ankit Tiwari"); 
    System.out.println("Array List Singers : "+list2); 
    parentList.add(list); 
    parentList.add(list1); 
    parentList.add(list2); 

String[][] twodimArray = new String[parentList.size()][]; 
    int i = 0, j = 0; 
for (ArrayList<String> row : parentList) { 
    twodimArray[i] = new String[row.size()]; 
    j = 0; 
    for (String str : row) { 
     twodimArray[i][j] = str; 
     j++; 
     } 
     i++; 
     } 
System.out.println("List of Artist : "+Arrays.deepToString(twodimArray)); 
    } 

}

相关问题