2015-01-06 2 views
2

Например, можно сказать, что я создал одномерный массив и инициировал массив до 100. Если я хочу иметь возможность использовать все значения массива, как в цикле for, как бы я это сделал? Я нашел два метода ниже, но я не уверен, какой подход рекомендуется. Также есть ли какие-то различия?Каков правильный способ представления целого массива в цикле for?

int[] list = new int[100]; 
for (int i = 0; i < list.length; i++) 

или

for (int i = 0; i < 100; i++) 

Какой из этих два синтаксиса чаще используются?

+0

Первый вариант лучше. На стороне примечания вы должны определить и использовать константу с информативным именем, вместо объявления нового массива с * магическим номером *, то есть: 'final int LIST_SIZE = 100;', а затем 'int [] list = new int [LIST_SIZE ]; '. –

ответ

10

Это намного лучше:

for (int i = 0; i < list.length; i++) 

Если вы передумали и решили, что список должен иметь длину 150 вместо, то остальная часть кода будет работать.

Другой вариант требует, чтобы вы изменили все свои циклы для всех, если вы вообще измените длину массива.

На самом деле нет других отличий.

EDIT: Как Manoj Sharma упоминалось в his answer, есть еще одна вещь, которую вы можете сделать:

for (int myInt : list) 

Это сделает итерацию для вас, но вы не можете получить индекс в цикле.

Я упоминаю об этом для полноты, но если вы сочтете это полезным, верните его ответ!

+3

list.length для массива '.size()' является свойством объекта 'List'. См. Http://stackoverflow.com/questions/9297899/arrays-length-property –

+0

кричит мне плохо! upvoted – holtc

+0

просто прочитал список, не увидев на самом деле массив. глупый я :) – holtc

0

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

var arraySize = yourArray.length; 

for(i;i<arraySize; i++){ 
//your code here. 
} 
+0

Почему это лучше? По моему опыту, когда я пробовал бенчмаркинг, это происходит быстрее. Едва как в среднем 1%. Но я не слишком много сделал. –

1

for (int i = 0; i < list.length; i++) Это динамическая обработка состояние, оно будет меняться в зависимости от вашей длины массива.

for (int i = 0; i < 100; i++) Это обработка статических условий. Если у вас есть тысячи циклов for, вам необходимо изменить каждое условие цикла.

Evey time убедитесь, что вы избегаете жесткого кодирования в своем приложении.

0

В Java 8 вам намного лучше учиться использовать потоки. Они более интуитивно понятны, и вам не нужно беспокоиться ни о чем таком, как размер.

Например:

int list[] = {4, 7, 3, 9, 11}; 
Arrays.stream(list)... 

В этом случае Arrays.stream знает, что вы создали IntStream так что вы получите максимум, мин, отсортированных, сумма и т.д.

Вам необходимо цикл гораздо реже Теперь.

1

Ну, выше ответа, данного @Anubian Noob, это хорошо. но java5 onward java обеспечивает улучшенный для каждого цикла, который намного лучше, чем другой. Даже отсутствие ошибки в этом методе.смотрите ниже:

for(int i: list){ 
System.out.println(i); 
} 

это будет охватывать весь массив и отображать все хранилища элементов в массиве. вы также можете использовать этот метод для многомерного массива.

+1

Но недостатком является то, что вы не можете получить индекс в своем цикле, который может быть раздражающим, если вам это нужно. Полезно упомянуть об этом. –

+0

Это зависит от состояния, у нас есть время и делать while loop. в некоторой ситуации, в то время как цикл лучше, чем для цикла. то же самое, если вам не нужен индексный номер, который вы просто хотите быстро и эффективно, без структуры доказательства ошибки, а затем перейдите для расширенного для цикла, а не простого для цикла. –

+0

Да, это зависит от вашего приложения. Это способ чище и проще в использовании, но имеет некоторые компромиссы. –

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