2015-06-29 2 views
0

У меня есть простой вопрос относительно структур данных в Java. , если у меня есть метод в Java, который возвращает структуру данных что-то вроде этогоЗапрос на некоторую настройку производительности

private List<String> getResults() { 
    List<String> data = new ArrayList<String>(); 
    data.add("One"); 
    data.add("Two"); 
    data.add("three"); 
    data.add("Four"); 
    return data; 
} 

и я хочу, чтобы перебрать этот список непосредственно в результате из метода, как это

void iterate() { 
    for (String value : getResults()) 
     System.out.println(value); 
} 

Будет ли это означает, что для каждого напечатанного значения метод getResults() всегда вызывается или просто кэшируется где-то в памяти и всегда ссылается в этом контексте в противоположность этому.

void iterate() { 
    List<String> results = getResults(); 
    for (String value : results) 
     System.out.println(value); 
} 

Просто расширение знаний base.Thanx

ответ

2

getResults() вызывается только один раз для того, чтобы создать Iterator<String> экземпляр, который затем используется для получения String с.

+0

Значит ли это, что Итератор хранит ссылку на исходный результат? – Olu

+0

@OluDoug В этом цикле создан один итератор, созданный на основе исходного списка, возвращаемого 'getResults()' в начале цикла. Однако, если переименованный List изменен внутри цикла, будет выбрано ConcurrentModificationException. – Eran

+0

Huhh ... не видел это один приход .. Thanx – Olu

Смежные вопросы