嵌套arraylist结构上的迭代显示意外结果

时间:2019-04-29 02:04:36

标签: java arraylist

我有一个嵌套的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);  
            }  
         }
        }

1 个答案:

答案 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);  
     }
}