0

我想知道如何动态创建数组列表并将它们添加到包含所有数组列表的数组列表中?我还想知道如何在 for-each 循环中从主数组列表中动态创建的数组列表中读取?

4

7 回答 7

7
List<Bar> innerList = new ArrayList<Bar>();
// add Bar objects to this list
List<List<Bar>> mainList = new ArrayList<List<Bar>>();
mainList.add(innerList); // adding innerList to mainList
for(List<Bar> listElement:mainList){
     // here listElement will give you an innerList
         for(Bar bar: listElement){
            // gives you a handle to each Bar element stored in
            // listElement
         }
}
于 2013-05-13T11:44:40.167 回答
3

考虑使用 Guava 的Multimap键为Integer.

多图

特别是ArrayListMultimap

MultimapLists将根据需要为您动态创建内部,所以..

要将元素添加到列表集中的任何列表:

Multimap<Integer, Bar> myMultimap = ArrayListMultimap.create();
myMultimap.put(1, new Bar());

List<Bar> listAtIndex5 = myMultimap.get(5);

Multimap还提供了使用 . 遍历所有内部列表中的所有元素的机制values。因此,您可以像这样遍历整个集合中的每个元素:

for (Bar bar: myMultimap.values()){
    // some work on bar
}
于 2013-05-13T11:43:45.560 回答
1

像这样..

ArrayList<DATA_TYPE> demo = new ArrayList<DATA_TYPE>();
for(DATA_TYPE i:demo)//foreach
{
System.out.println(i); 

}
于 2013-05-13T11:44:34.873 回答
1
ArrayList< ArrayList< Foo > > masterList = new ArrayList< ArrayList< Foo > >( );

ArrayList< Foo > subList = new ArrayList< Foo >();

subList.add( new Foo( ) );
subList.add( new Foo( ) );

msterList.add( subList ) );

// repeat

for ( ArrayList< Foo > subList : masterList )
{
  for ( Foo foo : subList )
  {
    System.out.println( foo );
  }
}
于 2013-05-13T11:45:53.087 回答
1

您可以像对待任何对象一样执行此操作。

添加到数组列表:

ArrayList<ArrayList> parent = new ArrayList<ArrayList>();
ArrayList<YourDataType> sub = new ArrayList<YourDataType>();
sub.add(new YourDataType());
parent.add(sub);

当您想从该列表中读取时:

for (ArrayList<YourDataType> list : parent){
     for(YourDataType obj : list){

        //access obj
      }

}

如果要访问特定索引处的子 ArrayList:

int index = 5;
if(index < parent.size()){
    ArrayList<YourDataType> sub = parent.get(index);
}

在此处查看有关 Java 列表的完整教程:

于 2013-05-13T11:45:59.320 回答
0
List list= new ArrayList();<\`pre`>
List list1= new ArrayList();
list1.add("Example1");
list1.add("Example2");
list.add(list1);
System.out.println(list);

你可以找到两个数组列表,它们被添加到另一个 <`pre`> 中

于 2013-05-13T11:52:47.990 回答
0

您可以使用以下几行来实现

动态声明列表

ArrayList<Object> childList = new ArrayList<Object>();
ArrayList<ArrayList<Object>> mainList=new ArrayList<ArrayList<Object>>();

将子列表添加到主列表

  mainList.add(childList);
  mainList.add(new ArrayList<String>());
  mainList.add(new ArrayList<Integer>());
  ........   

要访问 for 循环内的列表,

for(ArrayList listobj: mainList){
   for(Object obj : listobj){
     //do something here
  }
}

如果您希望所有列表都具有相同的类型,则可以在子列表声明中使用该类型而不是 Object,但是如果您希望所有子列表都不同,最好直接使用 Object 类。

于 2013-05-13T11:53:10.897 回答