Java для цикла для итерации и цикла нескольких переменных, пока условие не выполнено - PullRequest
0 голосов
/ 22 августа 2011

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

Ответы [ 3 ]

3 голосов
/ 22 августа 2011

Если взглянуть на проблему иначе, чем просто сказать «сделать x, чтобы сделать код на 50% быстрее», как вы тестировали код и как вы определили, что он слишком медленный?

JIT-компилятор Java в наши дни очень, очень хорош в том, что он делает, делая такие микрооптимизации, что вам не нужно. Если вы начинаете делать смешные объемы оптимизаций низкого уровня и запутывать свой код несколько глупо:

  • Вы можете или не можете достичь небольшого увеличения скорости
  • Вы сделаете ваш код практически не поддерживаемым и трудным для чтения
  • Вы можете обмануть JIT-компилятор, чтобы он не делал оптимизаций, которые он сделал бы иначе (поскольку он понимает идиомы Java гораздо больше, чем запутанный код.)

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

1 голос
/ 23 августа 2011

Комментарий Kerrek SB - мое предпочтительное решение.Здесь это переписано немного более обобщенно:

String[] X = new String[] {"AAA", "BBB", "CCC", "DDD"};
int XL = X.length;

for (int i=0; i<XL; i++) {
  println("i:" +X[i] +" j:" + X[(i+1)%XL] );
}

вернет:

i:AAA j:BBB
i:BBB j:CCC
i:CCC j:DDD
i:DDD j:AAA
0 голосов
/ 22 августа 2011

Во-первых, ваш цикл for не так уж и запутан, и вы можете добавить некоторые комментарии, чтобы сделать его более понятным.

Если вы хотите переписать его с учетом читабельности, вы можете сделать это с одним индексатором.

int i; 
int[] X = new int[] {111,222,333,444}; 


for (i=0; i < X.length; i++) { 
  println("i:" +i +" j:" + (i < X.lenght -1) ? i + 1 : 0); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...