黑马程序员技术交流社区
标题:
为什么ListIterator add()后不能set()或者remove()
[打印本页]
作者:
车风波
时间:
2012-6-17 12:59
标题:
为什么ListIterator add()后不能set()或者remove()
本帖最后由 车风波 于 2012-6-19 15:34 编辑
ArrayList<String> strings = new ArrayList<String>();
strings.add("abc");
ListIterator<String> iterator = strings.listIterator();
iterator.add("cba");//添加
// iterator.set("ddd");//改值
iterator.remove(); //删除
复制代码
这样写就出java.lang.IllegalStateException
作者:
张_涛
时间:
2012-6-17 13:24
API中是这样说明的:
remove
void remove()从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。对于每个 next 或 previous 调用,只能执行一次此调用。只有在最后一次调用 next 或 previous 之后,尚未调用 ListIterator.add 时才可以执行该调用。
指定者:
接口 Iterator<E> 中的 remove
抛出:
UnsupportedOperationException - 如果列表迭代器不支持 remove 操作。
IllegalStateException - 既没有调用 next 也没有调用 previous,或者在最后一次调用 next 或 previous 后调用了 remove 或 add。
作者:
车风波
时间:
2012-6-17 13:44
涅槃子衿 发表于 2012-6-17 13:24
API中是这样说明的:
remove
void remove()从列表中移除由 next 或 previous 返回的最后一个元素(可选操作 ...
原来API就写着啊,我怎么没想到查API。但也没说具体原因。
作者:
李海晓
时间:
2012-6-17 13:58
ListIterator<String> iterator = strings.listIterator();
ListIterator类中的iterator 得到了strings.listIterator()中的锁,
保证了不同线程同一时刻,只有一个线程来操作ArrayList类型实例对象的数据.确保安全.
所以iterator.remove(); 可以删除数据,
其实他调用的还是ArrayList中的Iterator中的remove方法
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2