Давайте попробуем сделать массивы простыми. Я постараюсь использовать как можно больше реальных сценариев, чтобы все, даже те, кто не разбирается в технических вопросах, могли их понять.
Во-первых, хороший способ думать о массиве как о контейнере, таком как коробка. Если бы у вас были предметы, например компакт-диски, и вы хотели бы хранить их все, вы бы нашли для них коробку. Теперь, есть некоторые вопросы, которые исходят из этого. Во-первых, сколько компакт-дисков я буду хранить, чтобы знать, насколько большая коробка мне нужна. Кроме того, вы должны убедиться, что у вас больше ничего нет в этой коробке, обычно в коробке для компакт-дисков хранятся только ваши компакт-диски!
Таким образом, с массивом или контейнером вы сначала инициализируете его и говорите, сколько объектов у вас там будет, в нашем случае это будут компакт-диски.
в java это делается так:
CDs[] CDBox = new CDs[10]
В этом случае мы инициализируем коробку, которая позволит нам иметь в ней 10 компакт-дисков. Следует отметить, что с массивами вам нужно будет указать количество вещей, которые вы будете хранить в нем, прежде чем хранить их. Это означает, что в нашем случае, если у нас есть 11 компакт-дисков, нам придется создать новый массив для размещения дополнительного компакт-диска.
Существует два взаимодействия с массивами: запись в и чтение из из массива.
Важной частью информации является то, что вы можете размещать свои объекты в любой заранее определенной точке массива. Например, если вы хотите воспроизвести компакт-диск в слоте 8, вы можете это сделать, вам не нужно начинать с первого слота. В соответствии с этим очень важно понимать, что массивы будут начинаться с 0. Это означает, что когда я определяю количество компакт-дисков, которые я хочу хранить в массиве, как 10 = (n), это действительно переводится в 9 (n-1). Эти числа известны как индексы. Поэтому, когда я сказал, что вы можете поместить компакт-диск в слот 8, это означало бы, что он будет в индексе 7.
Итак, если бы я сделал:
CD theBeatles = new CD("The Beatles");
CDBox[7] = theBeatles;
Теперь мы вставили компакт-диск Beatles в 8-й слот, а в вычислениях — 7-й индекс.
Кроме того, если бы мы записали два компакт-диска в один и тот же слот, слот 8 выглядел бы так:
CD theBeatles = new CD("The Beatles");
CD rollingStones = new CD("The Rolling Stones");
CDBox[7] = theBeatles;
CDBox[7] = rollingStones;
Сначала мы записали beatles в слот 8, однако, когда мы записали Rolling Stones в слот 8, это перезаписало наше предыдущее значение, и поэтому окончательное значение будет RollingStones.
Циклы — очень распространенный способ доступа (чтения и записи) к массивам.
int[] numbers = new int[10]
//inserting our values for(int i=0; i < 10; i++){ number[i] = i + 1; }
//reading our values that we inserted: for(int i=0; i<10; i++){ System.out.println(numbers[i]); }
//Numbers array will be as follows: //1 2 3 4 5 6 7 8 9 10
Вы можете проверить емкость массива в любое время. Это сумма, которую вы определили в начале, «насколько велика была ваша коробка для компакт-дисков».
System.out.println(CDBox.length);
Это скажет нам: 10. Однако убедитесь, что вы понимаете, что это не означает, что мы можем вставить компакт-диск в CDBox[10], всегда помните индексы, у нас есть емкость 10, но видя, что счетчик начинается с 0, это n-1, где 10 равно 10, 10–1 = 9. Это максимальный слот, который мы можем вставить в CDBox[9].
С точки зрения знания того, сколько значений было заполнено в нашей коробке для компакт-дисков, т. Е. Сколько компакт-дисков присутствует 1, 2, 3 из 10? К сожалению, мы, как программисты, должны сами это учитывать. Нам нужно было бы ввести переменную длины и сделать так, чтобы она автоматически увеличивалась при вставке наших значений:
int lenght = 0 for(int i=0; i<3; i++){ numbers[i]= i + 1; length++ } System.out.println(length)
In this example, our array would have the capacity of 10, as it always will. But the amount of CDs in the box, would be 2.
Вставка в начало уже заполненного массива будет очень затратной. Это будет означать, что все остальные значения должны быть сдвинуты на одну позицию вправо. Следовательно, это будет означать, что временная сложность будет равна N значениям. Количество времени будет пропорционально длине массива.
Комментарий выше относится к следующему сценарию:
→ если у вас есть массив длины 2: поэтому наши индексы 0, 1. Если мы поместим значения «тест» и «тестирование» в массив. Скажем, мы хотим поместить «test», который находится в индексе 0 (начало массива), в следующей позиции, а «hello» — в начале массива. Нам пришлось бы переместить «тест» на следующую позицию, а «привет» нужно было бы присвоить индекс 0.
Когда вы вставляете значение в случайную позицию, скажем, у вас есть массив, который может содержать 10 элементов (индексы: 0–9). Если вы хотите вставить по индексу 5, это означает, что все 6,7,8,9 должны быть сдвинуты на единицу вправо. Опять же, дорогостоящая сделка.