简体   繁体   中英

Infinite loop in iterator

I'm trying to learn constructor injection with collections. My Question class as below.

public class Question {  
private int id;  
private String name;  
private List<String> answers;  

public Question() {}  
public Question(int id, String name, List<String> answers) {  
    super();  
    this.id = id;  
    this.name = name;  
    this.answers = answers;  
}  

public void displayInfo(){  
    System.out.println(id+" "+name);  
    System.out.println("answers are:");  
    Iterator<String> itr=answers.iterator();  
    while(itr.hasNext()){  
        System.out.println(itr);  
    }  
}  

}  

My Test class as below.

public class Test {  
public static void main(String[] args) {  
    Resource r=new ClassPathResource("applicationContext.xml");  
    BeanFactory factory=new XmlBeanFactory(r);  

    Question q=(Question)factory.getBean("q");  
    q.displayInfo();  

}  
} 

This is my applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans  
    xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  

<bean id="q" class="DependencyInjection.Question">  
<constructor-arg value="111"></constructor-arg>  
<constructor-arg value="What is java?"></constructor-arg>  
<constructor-arg>  
<list>  
<value>Java is a programming language</value>  
<value>Java is a Platform</value>  
<value>Java is an Island of Indonasia</value>  
</list>  
</constructor-arg>  
</bean>  

</beans> 

Out put as below.

java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3 java.util.AbstractList$Itr@15aaf0b3

This is infinite loop. How can I solve this issue?

You are not advancing the Iterator , so your loop never ends.

Change:

while(itr.hasNext()){  
    System.out.println(itr);  
}

to:

while(itr.hasNext()){  
    System.out.println(itr.next());  
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM