java中list反向遍历问题,帮忙看下
正常遍历运行都正常,反向编译成功,没有输出,就很奇怪。。。。代码如下importjava.util.*;classCollectBianli{publicstaticvo...
正常遍历运行都正常,反向编译成功,没有输出,就很奇怪。。。。代码如下import java.util.*;class CollectBianli{ public static void main(String[] args){ ArrayList A=new ArrayList(); A.add("地软包子"); A.add("茄子包子"); A.add("牛肉包子"); A.add("大肉包子"); A.add("地三鲜包子"); sop(A); Bianli(A); FbianLi(A); } //正向遍历 public static void Bianli(ArrayList A){ ListIterator it=A.listIterator(); while(it.hasNext()){ sop1(it.next()+","); } } //反向遍历 public static void FbianLi(ArrayList A){ ListIterator it=A.listIterator(); while(it.hasPrevious()){ sop1(it.previous()+","); } } public static void sop(Object obj){ System.out.println(obj); } public static void sop1(Object obj){ System.out.print(obj); }}
展开
2个回答
展开全部
造成这个结果,相信题主也debug,从最终结果来看,代码进入了FbianLi方法,但是没有输出结果,那肯定就说明it.hasPrevious()返回了false
那为啥这里it.hasPrevious()返回了false呢,那我们直接去看这个方法的注释,由于是JDK提供的方法,那肯定也有很详尽的注释
从中可以看到,该方法表示在迭代器里以相反顺序遍历看是否还有元素,还有元素就返回true,否则就返回false
肯定题主会说,没错啊,相反顺序遍历肯定有元素啊
没错,按照题主所说的相反顺序遍历是肯定有元素的,但这里的相反顺序是说在Iterator,也就是迭代器的基础上的,这涉及到对迭代器的理解
迭代器本身就是顺序循环, 那指针就是从第一个元素开始的,所以这个时候it.hasPrevious()方法执行的含义代表指针所指反向顺序是否还有元素,第一个元素之前肯定没有元素吖,所以返回了false
展开全部
在反向遍历方法中,获取的迭代器指向第一个元素,it.hasPrevious() 的返回值是 false,所以while 不会执行,要想反向遍历,需要使 it 指向最后一个元素,如下代码:
// 反向遍历
public static void FbianLi(ArrayList A) {
ListIterator it = A.listIterator(A.size());
while (it.hasPrevious()) {
sop1(it.previous() + ",");
}
}
更多追问追答
追问
A.size()能再解释下吗,size不是返回元素数目吗
追答
没错,就是返回元素数目。
A.listIterator(A.size()); 这个其实是将指针移到最后一个元素的后面。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询