Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> while vs for 
V
    Опции темы
Tony
  Дата 11.9.2006, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Приветик всем!
Вопрос может глупый,но интересно мнение у4астников форума.

Код

                List <String>list=new ArrayList<String>();
        
        for(Iterator<String> it=list.iterator();it.hasNext();){
            String string=it.next();            
        }
        
        Iterator <String>it=list.iterator();
        while(it.hasNext()){
            String string=it.next();
        }

Какой из циклов(while,for) будет бысстрей работать с коллекцией? Слышел 4то for.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
y3u
Дата 11.9.2006, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 9.9.2006
Где: Москва

Репутация: 5
Всего: 13



по идее (могу ошибаться) никакой разницы, кроме как что один цикл с т.н. предусловием, а второй с постусловием. В случае с for область видимости переменной уже, поэтому меньше верятности случайно сделать реюз переменной it, а значит и рефакторить проще...

Это сообщение отредактировал(а) y3u - 11.9.2006, 16:40


--------------------
В нашей стране настаивать на кореньях, черной смородине, лимонных корках - гораздо эффективнее, чем на правах
PM MAIL   Вверх
chief39
Дата 11.9.2006, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Дык придумали же специально в пятой: 

Код

ArrayList<String> strL = new ArrayList<String>();
        
        for(String str : strL){
            System.out.println(str);
        }

smile

Как раз для перебора самое то smile



--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
Tony
Дата 11.9.2006, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



chief39 Читай внимателно вопрос topica !!! forEach не рассматривается.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
batigoal
Дата 11.9.2006, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



По идее, разницы в скорости быть не должно. Попробуй провести тест.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 11.9.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Tony @  11.9.2006,  16:32 Найти цитируемый пост)
Какой из циклов(while,for) будет бысстрей работать с коллекцией? Слышел 4то for.

Абсолютно одинаково.
Возьмем такой класс:
Код
import java.util.*;

public class Test
{
  public void iter1()
  {
    List <String>list=new ArrayList<String>();
        
    for(Iterator<String> it=list.iterator();it.hasNext();){
        String string=it.next();            
    }
  }

  public void iter2()
  {
    List <String>list=new ArrayList<String>();
        
    Iterator <String>it=list.iterator();
    while(it.hasNext()){
        String string=it.next();
    }
  }
}

и дизассемблируем его:
Код
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public void iter1();
  Code:
   0:   new     #2; //class java/util/ArrayList
   3:   dup
   4:   invokespecial   #3; //Method java/util/ArrayList."<init>":()V
   7:   astore_1
   8:   aload_1
   9:   invokeinterface #4,  1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
   14:  astore_2
   15:  aload_2
   16:  invokeinterface #5,  1; //InterfaceMethod java/util/Iterator.hasNext:()Z
   21:  ifeq    37
   24:  aload_2
   25:  invokeinterface #6,  1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
   30:  checkcast       #7; //class java/lang/String
   33:  astore_3
   34:  goto    15
   37:  return

public void iter2();
  Code:
   0:   new     #2; //class java/util/ArrayList
   3:   dup
   4:   invokespecial   #3; //Method java/util/ArrayList."<init>":()V
   7:   astore_1
   8:   aload_1
   9:   invokeinterface #4,  1; //InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
   14:  astore_2
   15:  aload_2
   16:  invokeinterface #5,  1; //InterfaceMethod java/util/Iterator.hasNext:()Z
   21:  ifeq    37
   24:  aload_2
   25:  invokeinterface #6,  1; //InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
   30:  checkcast       #7; //class java/lang/String
   33:  astore_3
   34:  goto    15
   37:  return

}

Как видишь байткод одинаковый.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Tony
Дата 11.9.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1159
Регистрация: 3.3.2006
Где: Riga

Репутация: нет
Всего: 12



Вопрос снят.Всем спасибо за у4астие.


--------------------
user posted image
user posted image
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2309 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.