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); }} 展开
 我来答
木有芒果
2018-04-14 · 如果你问我是谁~我会说我叫木有芒果~哈哈
木有芒果
采纳数:112 获赞数:595

向TA提问 私信TA
展开全部

造成这个结果,相信题主也debug,从最终结果来看,代码进入了FbianLi方法,但是没有输出结果,那肯定就说明it.hasPrevious()返回了false

那为啥这里it.hasPrevious()返回了false呢,那我们直接去看这个方法的注释,由于是JDK提供的方法,那肯定也有很详尽的注释

从中可以看到,该方法表示在迭代器里以相反顺序遍历看是否还有元素,还有元素就返回true,否则就返回false

肯定题主会说,没错啊,相反顺序遍历肯定有元素啊

没错,按照题主所说的相反顺序遍历是肯定有元素的,但这里的相反顺序是说在Iterator,也就是迭代器的基础上的,这涉及到对迭代器的理解

迭代器本身就是顺序循环, 那指针就是从第一个元素开始的,所以这个时候it.hasPrevious()方法执行的含义代表指针所指反向顺序是否还有元素,第一个元素之前肯定没有元素吖,所以返回了false

yinfengnong
2018-04-14 · TA获得超过5619个赞
知道大有可为答主
回答量:2344
采纳率:89%
帮助的人:2310万
展开全部

在反向遍历方法中,获取的迭代器指向第一个元素,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()); 这个其实是将指针移到最后一个元素的后面。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式