黑马程序员——java小结_009.001_LIstIterator操作顺序引起的角标异常

本文通过一个具体的示例,详细解析了Java中使用ListIterator时可能遇到的IllegalStateException异常原因及如何避免该问题。示例代码展示了在遍历过程中修改列表内容导致的异常,并给出了正确的操作顺序。

------- android培训java培训、期待与您交流! ----------

/*错误信息:

Exception in thread "main"java.lang.IllegalStateException

 atjava.util.ArrayList$ListItr.set(ArrayList.java:926)

 atListIteratorDemo.main(ListIteratorDemo.java:45)

*/

 

 

ListIterator中含有角标信息,切操作也是基于角标的,所以改变角标的操作都容易造成error。

 

<span style="font-size:18px;">import java.util.*;
class ListIteratorDemo
{
 public static void main(String[]args)
 {
  ArrayList al = new ArrayList();
   al.add("java01");
   al.add("java02");
   al.add("java03");
   
   ListIterator li =al.listIterator();
   while (li.hasNext()) {
    Object obj = li.next();
    if(obj.equals("java02")) {
     li.set("java006");
     li.add("+java08+");
     /*//li.set("java006");因为ListIterator是以角标为索引的,所以
      如果进行先add 在set会造成异常(角标改变了)反之不会 */
     }
    System.out.println("obj"+obj);
   }
   System.out.println(al);
 }
}</span>

------- android培训java培训、期待与您交流! ----------

 


java.util.NoSuchElementException是Java中的一个运行时异常,通常在使用迭代器(Iterator)或类似的集合视图(如List.listIterator(), Set.iterator(), Enumeration等)遍历集合元素时抛出,当尝试访问不存在的元素时,就会抛出此异常。以下是一些解决该异常的办法: - **正确使用迭代器**:在使用迭代器访问元素时,先使用`hasNext()`方法检查是否还有元素,再调用`next()`方法获取元素。避免像示例代码中那样使用误的无限循环,未检查`hasNext()`就调用`next()`,从而导致异常。示例代码如下: ```java import java.util.ArrayList; import java.util.Iterator; public class NoSuchElementExceptionExample { public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); list.add("元素1"); list.add("元素2"); // 假设在某个地方,list被清空了 list.clear(); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); } } } ``` - **使用`try-catch`块**:在可能出现异常的地方使用异常处理机制,捕获`NoSuchElementException`并做出合适的处理,比如记录日志或给出友好的误提示。示例代码如下: ```java try { // 尝试访问元素的操作 } catch (java.util.NoSuchElementException e) { System.err.println("没有更多元素可以访问"); // 处理异常逻辑 } ``` - **避免提前关闭系统资源**:在使用`Scanner`等系统资源时,要确保在确定不再使用系统的时候,才能将流关闭。因为系统资源不同于文件,一旦关闭就不能再打开,若提前关闭可能会导致该异常
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值