解决方案:依照迭代的元素的数据类型,使用一个该类型的变量接收每次迭代得到的元素,再执行其它操作
今天采取迭代器实现对Map集合中的元素进行遍历的时候抛出该异常
NoSuchElementException:该异常由Iterator接口的next方法继承,官方说明为如果迭代没有更多元素
依照官方的解释也就是说当迭代器中不存在任何元素的时候强制迭代则会抛出该异常,为了避免这种情况,针对Iterator接口还有hasNext方法。该方法用于判断迭代器中是否还存在元素可以迭代
一般情况下都是两者搭配使用,确保完成迭代器中所有元素的迭代。常用格式如下
Iterator<String>it=set.iterator();
while(it.hasNext()){
System.out.print(it.next());
}
按照常规思路,我的异常代码的迭代格式符合规范,可是它却偏偏抛出了不存在可迭代元素的异常。通过断点调试终于得出结果
异常原因:
的确是没有可迭代元素。因为在next方法中,它的每次执行都是迭代出下一个元素,它不会迭代重复元素,即使在同一个输出语句中,当第一个元素被迭代之后,它的下一次迭代一定是第二个元素。
所以当我的输出语句中有两个next方法的时候,常规思路上以为将迭代一个元素,实际上第一个next迭代完一个元素之后,下一个next方法就立马迭代第二个元素。也就是说我的输出语句中一次迭代了两个元素。而我set集合本身只有三个元素.所以当第二次循环执行时,就会抛出NoSuchElementException异常
解决方法:
使用字符串对象存储每次遍历的元素,再由输出语句去进行打印操作
如上所示,成功解决NoSuchElementException异常。
小结:
NoSuchElementException表示不存在可操作的元素,在使用迭代器中抛出该异常就表示不存在元素可以迭代
Iterator接口的next()方法的每次执行都是下一个元素,即使是在同一段语句中,迭代出来的也是不同的元素
尽量保持每次迭代过程中只需要一个next方法