Java 获取ArrayList的值(字符串)<;ArrayList<;字符串>&燃气轮机;(); 在爪哇

Java 获取ArrayList的值(字符串)<;ArrayList<;字符串>&燃气轮机;(); 在爪哇,java,android,arraylist,Java,Android,Arraylist,我知道这是一个简单的问题,但实际上 ArrayList<ArrayList<String>> collection; ArrayList<String> listOfSomething; collection= new ArrayList<ArrayList<String>>(); listOfSomething = new ArrayList<String>(); listOfSomething.Add("f

我知道这是一个简单的问题,但实际上

ArrayList<ArrayList<String>> collection;
ArrayList<String> listOfSomething;

collection= new ArrayList<ArrayList<String>>();
listOfSomething = new ArrayList<String>();

listOfSomething.Add("first");
listOfSomething.Add("second");
collection.Add(listOfSomething);
listOfSomething.Clear();
listOfSomething.Add("first");
collection.Add(listOfSomething);
ArrayList集合;
某事物的数组列表;
collection=newarraylist();
listOfSomething=newArrayList();
添加(“第一”);
添加(“第二个”);
集合。添加(某物列表);
某些内容的列表。清除();
添加(“第一”);
集合。添加(某物列表);
我想从ArrayList的ArrayList中获取字符串,但我不知道怎么做。比如我去

ArrayList<String> myList = collection.get(0); 
String s = myList.get(0);
ArrayList myList=collection.get(0);
字符串s=myList.get(0);
而且它有效!但是:

重大更新:
私有列表值;
私人上市价值z;
阵列列表;
ArrayList-listOfZ;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Zdatasource=新的Zdatasource(本);
Zdatasource.open();
valuesZ=Zdatasource.getAllZ();
Sdatasource=新的Sdatasource(此);
Sdatasource.open();
valuesS=Sdatasource.getall();
列表组数据
=新的ArrayList();
列出儿童数据
=新的ArrayList();
listOfS=newarraylist();
listOfZ=newarraylist();
对于(si:valuesS){//S是类
对于(zj:valuesZ){//Z是类
如果(j.getNumerS().equals(i.getNumerS())){
add(j.getNumerZ());
}
其他的
{
//添加(“无”);
}
}
添加(listOfZ);
如果(!listOf.isEmpty())listOfZ.clear();
}
@凌驾
公共布尔onChildClick(ExpandableListView父视图、视图v、int-groupPosition、,
int子位置,长id){
尝试
{       
ArrayList myList=listOfS.get(groupPosition);
字符串s=myList.get(childPosition);
PrintToast(“组”+Integer.toString(groupPosition)+”,子“+Integer.toString(childPosition)+”,”+s);
}
捕获(例外e)
{
Log.e(“FS”,e.toString());
} 
返回true;
}
return me java.lang.IndexOutOfBoundsException:索引1无效,大小为0 当我点击应该存在的项目时。我没有显示生成ListView的代码,但我可以告诉你我的listOfS包含3个项目:
第一个是Null listOfZ,第二个listOfZ得到2个元素,第三个listOfZ得到1个元素。

在列表中迭代列表的正确方法是:

//iterate on the general list
for(int i = 0 ; i < collection.size() ; i++) {
    ArrayList<String> currentList = collection.get(i);
    //now iterate on the current list
    for (int j = 0; j < currentList.size(); j++) {
        String s = currentList.get(1);
    }
}
//迭代常规列表
对于(int i=0;i
当您在此处清除列表并添加一个元素(“first”)时,
listOfSomething
的第一个引用也会更新,因为两者都引用同一个对象,因此当您访问第二个元素
myList.get(1)
(不再存在)时,您会得到空值

请注意两个
collection.Add(listOfSomething);
保存对同一arraylist对象的两个引用

您需要为两个元素创建两个不同的实例:

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

ArrayList<String> listOfSomething1 = new ArrayList<String>();
listOfSomething1.Add("first");
listOfSomething1.Add("second");

ArrayList<String> listOfSomething2 = new ArrayList<String>();
listOfSomething2.Add("first");

collection.Add(listOfSomething1);    
collection.Add(listOfSomething2);
ArrayList集合=新建ArrayList();
ArrayList listOfSomething1=新的ArrayList();
某物清单1.添加(“第一”);
添加(“第二个”);
ArrayList listOfSomething2=新的ArrayList();
添加(“第一个”);
集合。添加(某物列表1);
集合。添加(某些内容的列表2);

因为清除列表后,第二个元素为空

使用:


请记住,索引0是第一个元素

迭代列表的更简洁的方法是:

// initialise the collection
collection = new ArrayList<ArrayList<String>>();
// iterate
for (ArrayList<String> innerList : collection) {
    for (String string : innerList) {
        // do stuff with string
    }
}
//初始化集合
collection=newarraylist();
//迭代
对于(ArrayList innerList:collection){
for(字符串:innerList){
//用绳子做东西
}
}

在调用myList或字符串s时得到null?如果得到null,则表示集合中第一个列表的第二个元素为null。我们如何帮助?我将更新我的问题。是的,这是真的,但我写下了示例代码,犯了愚蠢的错误。是的。正确。我使用listOfZ=new ArrayList();而不是listOfZ.clear();
ArrayList<ArrayList<String>> collection = new ArrayList<ArrayList<String>>();

ArrayList<String> listOfSomething1 = new ArrayList<String>();
listOfSomething1.Add("first");
listOfSomething1.Add("second");

ArrayList<String> listOfSomething2 = new ArrayList<String>();
listOfSomething2.Add("first");

collection.Add(listOfSomething1);    
collection.Add(listOfSomething2);
String s = myList.get(0);
// initialise the collection
collection = new ArrayList<ArrayList<String>>();
// iterate
for (ArrayList<String> innerList : collection) {
    for (String string : innerList) {
        // do stuff with string
    }
}