我有一个嵌套的arraylist结构,需要对其进行迭代。请参阅以下内容:
ArrayList<ArrayList<SubjectnameandMark>> level2arraylist = new ArrayList<ArrayList<SubjectnameandMark>>();
然后我有以下要添加到level2arraylist
ArrayList<SubjectnameandMark> st1 = new ArrayList<SubjectnameandMark>();
ArrayList<SubjectnameandMark> st2 = new ArrayList<SubjectnameandMark>();
ArrayList<SubjectnameandMark> st3 =new ArrayList<SubjectnameandMark>();
我的SubjectnameandMark类如下:
public class SubjectnameandMark
{
String name;
double mark;
SubjectnameandMark(String name, double mark)
{
this.name=name;
this.mark=mark;
}
}
我通过以下方式向每个学生(st1,st2 ...)数组列表添加学科名称和分数:
SubjectnameandMark sub1 = new ServtermnameandWeight("math",1.0);
SubjectnameandMark sub2 = new ServtermnameandWeight("geo",1.0);
SubjectnameandMark sub3 = new ServtermnameandWeight("physics",0.389);
st1.add(sub1);
st1.add(sub2);
st1.add(sub3);
............
请注意,对所有st1,st2,st3 ...重复此过程。
最后,我将所有st数组列表添加到level2arraylist
中,如下所示:
level2arraylist.add(st1);
level2arraylist.add(st2);
level2arraylist.add(st3);
....................
现在,我尝试遍历这些嵌套的arraylist以查看主题名称和标记:
for (l=0;l<level2arraylist.size();l++)
{
for(n=0;n<level2arraylist.get(l).size();n++)
{
studenttomatch= level2arraylist.get(l);
Iterator<SubjectnameandMark> itr=studenttomatch.iterator();
while(itr.hasNext())
{
SubjectnameandMark st=(SubjectnameandMark)itr.next(); System.out.println(st.servterm+" "+st.servtermweight);
}
}
}
问题在于,并非所有主题和标记都显示出来。但是,如果我以以下方式限制循环变量,则显示该特定索引处的特定记录,例如,我仅限于第一条记录(l = 0; l <1)并显示正确的结果:>
for (l=0;l<1;l++)
{
for(n=0;n<level2arraylist.get(l).size();n++)
{
studenttomatch= level2arraylist.get(l);
Iterator<SubjectnameandMark> itr=studenttomatch.iterator();
while(itr.hasNext())
{
SubjectnameandMark st=(SubjectnameandMark)itr.next();
System.out.println(st.servterm+" "+st.servtermweight);
}
}
}
答案 0 :(得分:0)
这里不需要双重for循环结构,因为您正在使用迭代器。如果要遍历level2arraylist
中的所有元素,则不需要for循环来遍历level2arraylist.get(l)
中的所有元素,因为本质上这就是迭代器正在做的事情。因此,只需像这样删除内部for循环,
for (l=0;l<level2arraylist.size();l++)
{
studenttomatch= level2arraylist.get(l);
Iterator<SubjectnameandMark> itr=studenttomatch.iterator();
while(itr.hasNext())
{
SubjectnameandMark st=(SubjectnameandMark)itr.next();
System.out.println(st.servterm+" "+st.servtermweight);
}
}