A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 车风波 于 2012-6-19 15:34 编辑
  1. ArrayList<String> strings = new ArrayList<String>();
  2. strings.add("abc");
  3. ListIterator<String> iterator = strings.listIterator();
  4. iterator.add("cba");//添加
  5. // iterator.set("ddd");//改值
  6. iterator.remove(); //删除
复制代码
这样写就出java.lang.IllegalStateException

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
API中是这样说明的:
remove
void remove()从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。对于每个 next 或 previous 调用,只能执行一次此调用。只有在最后一次调用 next 或 previous 之后,尚未调用 ListIterator.add 时才可以执行该调用。

指定者:
接口 Iterator<E> 中的 remove
抛出:
UnsupportedOperationException - 如果列表迭代器不支持 remove 操作。
IllegalStateException - 既没有调用 next 也没有调用 previous,或者在最后一次调用 next 或 previous 后调用了 remove 或 add。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
涅槃子衿 发表于 2012-6-17 13:24
API中是这样说明的:
remove
void remove()从列表中移除由 next 或 previous 返回的最后一个元素(可选操作 ...

原来API就写着啊,我怎么没想到查API。但也没说具体原因。
回复 使用道具 举报
ListIterator<String> iterator = strings.listIterator();
ListIterator类中的iterator 得到了strings.listIterator()中的锁,
保证了不同线程同一时刻,只有一个线程来操作ArrayList类型实例对象的数据.确保安全.
所以iterator.remove(); 可以删除数据,
其实他调用的还是ArrayList中的Iterator中的remove方法
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马