powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ITERATOR.next()
23 сообщений из 23, страница 1 из 1
ITERATOR.next()
    #34905303
SATURN2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код из tutorial по jave:
for (Iterator<Type> it = m.keySet().iterator(); it.hasNext(); )
if (it.next().isBogus())
it.remove();

Вопрос:
Любой пример в обучалке по использованию iteratorа
имеет вышеприведенный вид.
Мы проверяем на "true" или "false"
выражение it.next(), но что подразумевается
под "isBogus" не понятно.

А как вы делаете эту проверку?
Как проверять на null в jave?
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905364
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
isBogus() это метода класса Type. Читай так же туториал по Java Generic. К итераторам отношения не имеет.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905386
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше делать тогда уж так
Код: plaintext
1.
2.
3.
4.
5.
6.
 for  (Iterator<Type> it = m.keySet().iterator(); it.hasNext();) {
  Type item = it.next();
   if  (item.isBogus()) {
    it.remove();
  }
}
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905389
SATURN2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A-aaa ... Ok
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905390
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. isBogus() это просто условность, можете заменить это для своего спокойствия чем-то вроде
isEtoPlohoyeZnatchenie() (а лучше учите ангийский :) )
Кстати, тут проверки на null нет.

2. Проверка на null, как ни странно, зависит от того, что вы хотите получить:
Например,
assert val != null; ( - при отладке )

или

if (val == null) { ....

или

if (null == val) { ... (имеет значение порядок, вопрос для домашнего задания: Почему?)

или

val.myMethod(); //Т.е. принципиально хотим получить исключение при null (не совсем проверка, разумеется, но где-то тоже пригодится).
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905427
SATURN2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все - все , уже все понятно - не бейте...
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905504
kest_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carperif (null == val) { ... (имеет значение порядок, вопрос для домашнего задания: Почему?)
Я с заданием не справился. Какой правильный ответ? Очень похоже на неуместную оптимизацию, но и то сомневаюсь в ее эффективности, все таки Java не С/С++. Зато ухудшение читаемости на лицо.

Очень любопытно какой правильный ответ. В гугле нашел только это , но и там однозначно не объяснили зачем это может быть нужно.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905591
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carper
или

if (val == null) { ....

или

if (null == val) { ... (имеет значение порядок, вопрос для домашнего задания: Почему?)

Нипочему. Не имеет никакого значения этот порядок.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
     public   static   void  test121()  throws  Exception {
         int  TOTAL =  100000000 ;
         long  time = - 1 ;
         long  diff = - 1 ;
        
        Random rand =  new  Random();

         int  NULLS =  0 ;
         int  NOTNULLS =  0 ;
        String obj =  null ;
        time = System.currentTimeMillis();
         for  ( int  i =  0 ; i < TOTAL; i++) {
             if  (rand.nextBoolean()) {
                obj = "hello";
            }  else  {
                obj =  null ;
            }
             if  (obj ==  null ) {
                NULLS++;
            }  else  {
                NOTNULLS++;
            }
        }
        diff = System.currentTimeMillis() - time;
        System.out.println("Equals for " + TOTAL + " equals, like 'obj == null' : " + diff + " msec. TOTAL = " + NOTNULLS);

        NULLS =  0 ;
        NOTNULLS =  0 ;
        time = System.currentTimeMillis();
         for  ( int  i =  0 ; i < TOTAL; i++) {
             if  (rand.nextBoolean()) {
                obj = "hello";
            }  else  {
                obj =  null ;
            }
             if  ( null  == obj) {
                NULLS++;
            }  else  {
                NOTNULLS++;
            }
        }
        diff = System.currentTimeMillis() - time;
        System.out.println("Equals for " + TOTAL + " equals, like 'null == obj' : " + diff + " msec. TOTAL = " + NOTNULLS);

        NULLS =  0 ;
        NOTNULLS =  0 ;
        time = System.currentTimeMillis();
         for  ( int  i =  0 ; i < TOTAL; i++) {
             if  (rand.nextBoolean()) {
                obj = "hello";
            }  else  {
                obj =  null ;
            }
             if  (obj !=  null ) {
                NOTNULLS++;
            }  else  {
                NULLS++;
            }
        }
        diff = System.currentTimeMillis() - time;
        System.out.println("Equals for " + TOTAL + " equals, like 'obj != null' : " + diff + " msec. TOTAL = " + NOTNULLS);

        NULLS =  0 ;
        NOTNULLS =  0 ;
        time = System.currentTimeMillis();
         for  ( int  i =  0 ; i < TOTAL; i++) {
             if  (rand.nextBoolean()) {
                obj = "hello";
            }  else  {
                obj =  null ;
            }
             if  ( null  != obj) {
                NOTNULLS++;
            }  else  {
                NULLS++;
            }
        }
        diff = System.currentTimeMillis() - time;
        System.out.println("Equals for " + TOTAL + " equals, like 'null != obj' : " + diff + " msec. TOTAL = " + NOTNULLS);
    }

Код: plaintext
1.
...jdk1. 5 \bin\javaw -server -Xms32m -Xmx256m ...

LAUNCH 1
Код: plaintext
1.
2.
3.
4.
Equals  for   100000000  equals, like 'obj == null' :  6719  msec. TOTAL =  50007064 
Equals  for   100000000  equals, like 'null == obj' :  6766  msec. TOTAL =  49994240 
Equals  for   100000000  equals, like 'obj != null' :  6766  msec. TOTAL =  50003932 
Equals  for   100000000  equals, like 'null != obj' :  6750  msec. TOTAL =  50005800 

LAUNCH 2
Код: plaintext
1.
2.
3.
4.
Equals  for   100000000  equals, like 'obj == null' :  6875  msec. TOTAL =  49995314 
Equals  for   100000000  equals, like 'null == obj' :  6875  msec. TOTAL =  50000129 
Equals  for   100000000  equals, like 'obj != null' :  6750  msec. TOTAL =  50003380 
Equals  for   100000000  equals, like 'null != obj' :  6735  msec. TOTAL =  50000314 

LAUNCH 3
Код: plaintext
1.
2.
3.
4.
Equals  for   100000000  equals, like 'obj == null' :  6703  msec. TOTAL =  50001996 
Equals  for   100000000  equals, like 'null == obj' :  6890  msec. TOTAL =  49993639 
Equals  for   100000000  equals, like 'obj != null' :  6766  msec. TOTAL =  49996642 
Equals  for   100000000  equals, like 'null != obj' :  6750  msec. TOTAL =  50002080 
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905622
SATURN2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carperили

if (val == null) { ....

или

if (null == val) { ... (имеет значение порядок, вопрос для домашнего задания: Почему?)


Я даже не расценила это как вопрос,
судя по другим языкам - порядок не имеет значение.
А тут такая полемика
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905631
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что характерно.

jdk142_04\bin\javaw -server -Xms32m -Xmx256m...
Код: plaintext
1.
2.
3.
4.
Equals  for   100000000  equals, like 'obj == null' :  7156  msec. TOTAL =  49996697 
Equals  for   100000000  equals, like 'null == obj' :  7156  msec. TOTAL =  50007077 
Equals  for   100000000  equals, like 'obj != null' :  6922  msec. TOTAL =  50005516 
Equals  for   100000000  equals, like 'null != obj' :  6922  msec. TOTAL =  49998597 


jdk1.6.0\bin\javaw -server -Xms32m -Xmx256m...
Код: plaintext
1.
2.
3.
4.
5.
Equals  for   100000000  equals, like 'obj == null' :  5844  msec. TOTAL =  50000555 
Equals  for   100000000  equals, like 'null == obj' :  5672  msec. TOTAL =  50007744 
Equals  for   100000000  equals, like 'obj != null' :  6140  msec. TOTAL =  49997692 
Equals  for   100000000  equals, like 'null != obj' :  6141  msec. TOTAL =  50003056 

...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905633
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SATURN2
Я даже не расценила это как вопрос,
судя по другим языкам - порядок не имеет значение.
А тут такая полемика
Это в C++ имеет значение. Но это язык вообще для тех, кто на всю голову.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34905639
kest_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SATURN2Я даже не расценила это как вопрос,
судя по другим языкам - порядок не имеет значение.
А тут такая полемика
просто бывают скрытые фичи языка. Например "1".equals(str) часто использовать предпочтительнее, чем str.equals("1"), т.к. во втором случае может быть эксепшен при str == null (или нужна дополнительная проверка)
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34906022
SATURN2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Софтверный проктолог Это в C++ имеет значение. Но это язык вообще для тех, кто на всю голову.
Я уж думала, что совсем С++ забыла за 2 года.

см. здесь
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34906031
Фотография agrasoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carper
if (val == null) { ....

или

if (null == val) { ... (имеет значение порядок, вопрос для домашнего задания: Почему?)раскажи, пожалуйста, почему? я спать не могу.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34906507
kest_ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SATURN2Я уж думала, что совсем С++ забыла за 2 года.

см. здесь
В С/С++ как раз самое главное отличие, что при (NULL == val) нельзя ошибку сделать, забыв одно равно. Много раз на этом накалывался. К счастью, в Java такой проблемы нет.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34906731
SATURN2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kest_ruВ С/С++ как раз самое главное отличие, что при (NULL == val) нельзя ошибку сделать, забыв одно равно. Много раз на этом накалывался. К счастью, в Java такой проблемы нет.

Вопрос звучал так

carperимеет значение порядок

Ответ - нет.

Не надо забывать ставить равно ;)))
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34906972
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господи!
Понафлудили, знал бы не писал, я же так- мелкий нюанс. :)

Ну, ладно возьмите такой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public   class  Test {
   public   static   void  main(String[] args) {
  	 Boolean  testStr =  null ;

       //Вот это скомпилируется без ошибок, получим nullPointerException только во время выполнения.
       	 if (testStr =  null )  {
  	  System.out.println("Hello"); 
  	}
       
      /*А теперь представте на секундочку, что этот кусок кода показался кому-то "не суть важным" и  он проигнорировал исключение */
  	/*  Вот тут нас поймает за руку еще компилятор
               if(null = testStr)  {
  		System.out.println("Hello");
  	   } */
  }
}

Пример, разумеется примитивный и ошибка всплывет быстренько, а если у нас вышеприведенный NullPointerException ожидался совсем по другой причине (например, при чтении из потока) и мы никак не предполагали, что в его обработке надо учитывать и явное присвоение null?

Рассмотрим случай
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
 public   class  Test {
	  public   static   void  main(String[] args) {
	   String msg;
	    try  {
	           // msg = readSomeNonCriticalInformationFromStream();
	   		 Boolean  testVal = veryImportantPasswordCheck();
	   	 if (testVal =  null )  { //Хотим, при получении null немедленно выйти из программы
	    	  System.out.println("The critical error!");
	    	   return ;
	    	}//if
	   }  catch (NullPointerException e) { //Вместо этого попадаем сюда и обрабатываем такую же  ошибку, но от совсем другой функции, не являющуюся критичной.
	           //msg = "cannot read the current file date will use system one"; 
	   }//try
	   
	       //Вуаля, как ни в чем не бывало продолжаем выполнять программу :)
	   	System.out.println("Here we are"); 
	  }
	  
	  
	   static   Boolean  veryImportantPasswordCheck() {
	  	 return   null ;
	  }

	}
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34907071
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carperГосподи!
Понафлудили, знал бы не писал, я же так- мелкий нюанс. :)


Прежде ты написал, что имеет значение порядок операндов при использовании логического оператора сравнения. А теперь приводишь пример с оператором присваивания. В общем, запутал.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34907107
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wessen carperГосподи!
Понафлудили, знал бы не писал, я же так- мелкий нюанс. :)


Прежде ты написал, что имеет значение порядок операндов при использовании логического оператора сравнения. А теперь приводишь пример с оператором присваивания. В общем, запутал.

Я имел в виду, что порядок операторов при использовании логического оператора сравнения имеет значение для недопущения вышеозначенной ошибки.

Хотя, согласен, что понять это можно было весьма неоднозначно.

Я больше так не буду, где тут смайлик кающегося грешника? :)
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34907187
wessen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carper
Я имел в виду, что порядок операторов при использовании логического оператора сравнения имеет значение для недопущения вышеозначенной ошибки.


Флудить, так флудить :) В каком месте вот в этом примере http://sql.ru/forum/actualpost.aspx?bid=38&tid=489745&mid=4859563&p=1&act=quot#4859364 , используется логический оператор сравнения?
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34908081
Фотография Софтверный проктолог
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carper
Рассмотрим случай
Код: plaintext
1.
...

Ты написал полную чушь. Со всех точек зрения.
Просто расслабься и в дальнейшем таких громких заявлений не делай.
Или хотя бы уж пиши нормальные примеры.
Для отлова применений вместо сравнений люди давно придумали такие средства в IDE, как:
а) подсветка синтаксиса
б) проверка кода в runtime (которая такие ошибки выявляет)
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34908143
mikkri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carperХотя, согласен, что понять это можно было весьма неоднозначно.
А я вот понял сразу. Хотя я и не адепт таких извращений.

Еще пример могу привести:
Код: plaintext
1.
2.
3.
 if  (isActive() == false) { 
... 
}

Т.е. очевидно, что проверка на false. Оператор отрицания ! можно и не заметить или забыть поставить.
...
Рейтинг: 0 / 0
ITERATOR.next()
    #34908597
carper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mikkri carperХотя, согласен, что понять это можно было весьма неоднозначно.
А я вот понял сразу. Хотя я и не адепт таких извращений.


Ну, не знаю, я все-же думаю, что мне следовало написать пояснее, хотя бы с точки зрения формальной логики.
Что касается извращения null == value, то и согласен и нет, с одной стороны, чисто визуально смотрится неопрятно, с другой стороны позволяет несколько укоротить ручки самому себе.
Такие ошибки обычно крайне редки, но, по закону подлости, если уж всплывут, то ищут их всем миром не один день.

В общем же, вопрос довольно любопытный с психологической точки зрения, т.к. борясь с одной стороны с ошибками, формализуя правила написания кода, с другой, мы ухудшаем читабельность кода, что тоже может вызвать ошибки.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ITERATOR.next()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]