今天在用java编程时遇到一个小问题,记下来备忘:
Iterator迭代器是遍历List等容器时经常用到的,在使用时一定要注意,如果为Iterator对象进行了初始化或者赋值,那么一旦与Iterator对象关联的容器对象发生变化,则原来的Iterator对象失效,需要重新赋值。
下面举例说明:
ArrayList<Integer> list=new ArrayList<Integer>(); //创建一个ArrayList对象
Iterator<Integer> iterator=list.iterator() //创建Iterator对象,并对其初始化
//为list填充数据
while(distance>0){
list.add(distance);
distance=(distance-1)/3;
}
while(iterator.hasNext()){ //错误,此处的iterator失效,不能调用hasNext()函数
......
}
而下面是正确的写法:
ArrayList<Integer> list=new ArrayList<Integer>();
Iterator<Integer> iterator;//这里没有为Iterator对象赋值
while(distance>0){
list.add(distance);
distance=(distance-1)/3;
}
iterator=list.iterator();//这里为Iterator对象赋值
while(iterator.hasNext()){
......
}
分享到:
相关推荐
在使用 Iterator 遍历集合元素时,需要注意以下几点: 1. Iterator 不是把集合元素本身传给了迭代变量,而是把集合元素的值传给了迭代变量。因此,修改迭代变量的值对集合元素本身没有任何改变。 2. 当使用 ...
在使用Iterator模式时,需要注意以下几点: 1. **迭代器的获取**:通常,聚合对象会提供一个方法来获取迭代器实例。 2. **遍历操作**:迭代器提供了`hasNext()`方法来检查是否还有更多元素,以及`next()`方法来获取...
在上述描述中,开发者遇到了一个关于`iterator`标签嵌套使用的问题,涉及到`LinkedHashMap`存储的数据结构。让我们深入探讨这个问题。 首先,`Timereport_infoAction`类中有几个关键的属性,包括`timereport_infos`...
一旦获得了`Iterator`实例,就可以使用`hasNext()`方法检查是否还有更多的元素可以遍历,使用`next()`方法获取下一个元素。通常情况下,会使用`while`循环来进行遍历: ```java while (it.hasNext()) { System.out....
2. `Iterator<E> iterator()`: 返回一个`Iterator`实例,用于遍历聚合对象中的元素。 接下来是`BookShelf`类,它可能是一个具体的聚合类,代表一个书架,存储`Book`对象。它需要实现`Aggregate`接口,因此必须提供`...
"Iterator接口" Iterator接口是Java编程语言中的一种...Iterator接口和ListIterator接口是Java编程语言中非常重要的接口,提供了一个通用的方式来遍历集合中的元素,并且可以控制迭代器的行为,广泛应用于实际项目中。
我们可以创建一个简单的程序,演示如何使用`Iterator`遍历ArrayList: ```java import java.util.ArrayList; import java.util.Iterator; public class MyIterator { public static void main(String[] args)...
要使用`Iterator`,首先需要从集合对象获取一个`Iterator`实例。这通常是通过调用集合对象的`iterator()`方法实现的。例如: ```java List<String> list = new ArrayList(); list.add("Hello"); list.add("World");...
在多线程环境下,需要注意的是,如果一个线程正在使用迭代器遍历集合,另一个线程同时修改了集合,可能会导致`ConcurrentModificationException`。为了避免这种情况,可以使用`Collections.synchronizedList()`或`...
值得注意的是,`add()`方法的返回值是一个布尔值,用来指示集合的内容是否因调用该方法而发生了改变。如果集合拒绝添加元素(无论出于何种原因),应抛出异常而非返回特定的布尔值。 此外,`Collection`接口还提供...
这里的写法存在一些问题,因为第二层迭代器的`value`属性应该是指向第一层迭代器中的当前元素,而不是另一个名为`ist`的列表。正确的写法应该如下: ```xml <s:iterator value="#request.list" status="sta"> <s:...
- 删除一个容器元素时,可能会使指向该元素的迭代器失效。在进行删除操作后,不要立即使用已被删除元素的迭代器。 - 使用`erase`方法返回的迭代器,可以安全地继续遍历容器,因为它指向了下一个未被删除的元素。 ...
在使用`Iterator`时,要注意不要在遍历过程中修改`HashMap`,因为这可能会抛出`ConcurrentModificationException`。如果必须修改,可以使用`Iterator`的`remove()`方法,或者使用Java 8引入的流(Stream)API,这样...
下面是一个简单的例子,展示了如何使用`Iterator`遍历一个`List`: ```java List<String> list = new ArrayList(); list.add("A"); list.add("B"); list.add("C"); Iterator<String> iterator = list.iterator(); ...
开源项目“json-iterator-go”是一个针对Go语言的高性能JSON解析库,它的设计目标是提供与标准库`encoding/json`完全兼容的接口,同时在性能上有所提升。这个压缩包`json-iterator-go.zip`包含了项目的源代码,具体...
当使用`<s:iterator>`标签时,Struts2框架会自动创建一个`Iterator`实例,并通过这个实例来遍历指定的集合对象`userlist`。每次迭代时,都会创建一个名为`uid`的对象,该对象包含了当前迭代到的用户信息。在标签体内...
下面是一个使用Iterator删除元素的示例代码: ```java public class PracticeController { public static void main(String[] args) { List<String> list = new ArrayList(); for (int i = 0; i ; i++) { list....
但是,使用`iterator()`时要注意事务管理,因为其对数据库连接的占用时间可能较长。 5. **数据迭代** 无论是`list()`还是`iterator()`,在遍历结果时都需要确保正确处理游标或集合。对于`list()`,可以使用普通的...
在使用迭代器遍历集合时,需要注意的一个问题是,在遍历过程中修改集合可能会导致未预期的结果。因此,在设计迭代器时,通常会考虑到这一点,比如通过实现只读的迭代器来避免在遍历时修改集合。 #### 推荐资源 ...
这个“iterator-demo”应该是一个示例项目,用于演示如何在实际编程中应用迭代器模式。下面我们将深入探讨迭代器模式及其在IT领域的应用。 迭代器模式的核心思想是为集合类提供一种统一的访问方式,使得客户代码...