Sdscompany.ru

Компьютерный журнал
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Arraylist java инициализация при создании

Как объявить и инициализировать массив в Java?

как объявить и инициализировать массив в Java?

19 ответов

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

для примитивных типов:

для классов, например String , Это-же:

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

существует два типа массива.

Одномерный Массив

синтаксис значений по умолчанию:

или (менее предпочтительно)

синтаксис с заданными значениями (инициализация переменной / поля):

или (менее предпочтительно)

Примечание: Для удобства int[] num предпочтительнее, потому что он ясно говорит, что вы говорите здесь о массиве. Иначе никакой разницы. Не все.

многомерный массив

декларация

инициализации

рваный массив (или непрямой массив)

Итак, здесь мы явно определяем столбцы.
Иначе:

для Доступ:

рваные массивы многомерные массивы.
Для объяснения см. подробности многомерного массива в официальные учебники java

также допустимо, но я предпочитаю скобки после типа, потому что легче увидеть, что тип переменной на самом деле является массивом.

существуют различные способы объявления массива в Java:

вы можете найти более подробную информацию в Sun учебник сайт и JavaDoc.

Я считаю, это полезно, если вы понимаете каждую часть:

Type[] — это тип на переменная called name («имя» называется идентификатор). Литерал «Type» является базовым типом, а скобки означают, что это тип массива этой базы. Типы массивов, в свою очередь, являются собственными типами, что позволяет создавать многомерные массивы типа Type[][] (массив типа[]). Ключевое слово new говорит выделить память для нового массива. Число между скобками говорит о том, насколько большим будет новый массив и сколько памяти нужно выделить. Например, если Java знает, что базовый тип Type занимает 32 байта, и вы хотите массив размером 5, он должен внутренне выделить 32 * 5 = 160 байт.

вы также можете создавать массивы с уже имеющимися значениями, такими как

, который не только создает пустое пространство, но и наполняет эти ценности. Java может сказать, что примитивы целых чисел и что их 5, поэтому размер массива можно определить неявно.

ниже представлены объявления массива, но массив не инициализируется:

ниже показано объявление, а также инициализация массива:

теперь следующее также показывает объявление, а также инициализацию массива:

но этот третий показывает свойство анонимного создания массива-объекта, на которое указывает ссылочная переменная «myIntArray», поэтому, если мы напишем просто » new int [] <1,2,3>; » тогда вот как можно создать анонимный объект-массив.

если мы просто пишем:

это не объявление массива, но следующий оператор делает вышеуказанное объявление полным:

объявляет массив с именем arrayName размера 10 (у вас есть элементы от 0 до 9 для использования).

кроме того, если вы хотите что-то более динамичное, есть интерфейс списка. Это не будет выполнять, как хорошо, но является более гибким:

существует два основных способа создания массива:

Этот, для пустого массива:

и этот, для инициализированного массива:

вы также можете сделать многомерные массивы, как это:

возьмем примитивный тип int например. Существует несколько способов объявить и int время:

где во всех этих, Вы можете использовать int i[] вместо int[] i .

С отражением, вы можете использовать (Type[]) Array.newInstance(Type.class, capacity);

обратите внимание, что в параметрах метода, . указано variable arguments . По сути, любое количество параметров прекрасно. Это проще объяснить с помощью кода:

внутри метода, varargs рассматривается как нормальный int[] . Type. может использоваться только в параметрах метода, поэтому int. i = new int[] <> не будет компилироваться.

обратите внимание, что при прохождении int[] к методу (или любому другому Type[] ), вы не можете использовать третий способ. В заявлении int[] i = ** , компилятор предполагает, что <. >означает int[] . Но это потому, что вы объявляете переменную. При передаче массива методу объявление должно быть либо new Type[capacity] или new Type[] <. >.

Многомерная Массивы

многомерные массивы гораздо сложнее иметь дело. По сути, 2D-массив — это массив массивов. int[][] означает массив int[] s. Ключ в том, что если int[][] объявлен int[x][y] , максимальный индекс i[x-1][y-1] . По сути, прямоугольный int[3][5] — это:

Инициализация ArrayList в одну строку

Я хочу создать список опций для тестирования. Сначала я сделал это:

Затем я изменил код следующим образом:

Есть ли лучший способ сделать это?

30 ответов

На самом деле, вероятно, «лучший» способ инициализации ArrayList — это метод, который вы написали, так как не нужно создавать новый List любым способом:

Подвох в том, что для ссылки на этот экземпляр list достаточно много печатать.

Есть альтернативы, такие как создание анонимного внутреннего класса с инициализатором экземпляра (также известный как «инициализация двойной скобкой»):

Тем не менее, я не слишком люблю этот метод, потому что в итоге вы получите подкласс ArrayList , который имеет экземпляр инициализатор, и этот класс создан только для создания одного объекта — мне это кажется немного излишним.

Что было бы хорошо, если бы Литералы коллекций предложение для Project Coin было принято (его планируется ввести в Java 7, но вряд ли это будет частью Java 8).

К сожалению, здесь это не поможет, так как инициализирует неизменяемый List , а не ArrayList и, более того, он еще не доступен, если он когда-либо будет.

Было бы проще, если бы вы просто объявили его как List — это должен быть ArrayList?

Или, если у вас есть только один элемент:

Это будет означать, что places является неизменным (попытка изменить его приведет к UnsupportedOperationException возникшее исключение).

Чтобы создать изменяемый список, представляющий собой конкретный ArrayList , вы можете создать ArrayList из неизменного списка:

Простой ответ

В Java 9 или новее:

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

Java 8 или более ранняя версия:

Это даст вам List , поддерживаемый массивом, поэтому он не может изменить длину.
Но вы можете вызвать List.set , так что он все еще изменчив.

Краткий ответ

Вы можете сделать Arrays.asList еще короче при статическом импорте:

Что любая современная IDE предложит и автоматически сделает для вас.
Например, в IntelliJ IDEA вы нажимаете Alt+Enter и выбираете Static import method.

Однако я не рекомендую сокращать метод Java 9 List.of , поскольку в нем просто of сбивает с толку.
List.of уже достаточно короткий и хорошо читается.

Использование Stream s

Почему это должен быть List ?
В Java 8 или более поздней версии вы можете использовать Stream , который более гибок:

Читать еще:  Программа для восстановления жесткого диска после форматирования

Вы можете объединить Stream s:

Или вы можете перейти от Stream к List :

Но желательно, просто используйте Stream , не собирая его в List .

Если вам действительно определенно нужен java.util.ArrayList

(Вероятно, нет.)
Цитировать JEP 269 (выделено мной):

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

Если вы хотите оба предварительно заполнить ArrayList и , добавьте к нему потом (почему?) используйте

или в Java 8 или более ранней версии:

или используя Stream :

Но опять же, лучше просто использовать Stream напрямую, а не собирать его в List

Программа для интерфейсов, а не для реализаций

Вы сказали, что объявили список как ArrayList в своем коде, но делать это следует только в том случае, если вы используете некоторый член ArrayList , которого нет в List .

Что вы, скорее всего, не делаете.

Обычно вам просто нужно объявлять переменные в самом общем интерфейсе, который вы собираетесь использовать (например, Iterable , Collection или List ) и инициализировать их конкретной реализацией (например, ArrayList , LinkedList или Arrays.asList() )

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

Другим примером всегда будет объявление переменной a InputStream , хотя обычно это FileInputStream или BufferedInputStream , потому что скоро вы или кто-то другой захотите использовать какой-нибудь другой вид InputStream

Если вам нужен простой список размером 1:

Если вам нужен список из нескольких объектов:

С помощью гуавы вы можете написать:

В Гуаве есть и другие полезные статические конструкторы. Вы можете прочитать о них здесь .

Литералы коллекции не попали в Java 8, но можно использовать Stream API для инициализации списка в одну довольно длинную строку:

Если вам нужно убедиться, что ваш List является ArrayList :

С Java 9 , как указано в Предложение по улучшению JDK — 269 , это можно сделать, используя литералы коллекции , теперь как —

Аналогичный подход также применим к Map —

, что похоже на предложение литералов коллекции как заявлено @coobird также. Также уточняется в документе JEP —

Альтернативы

Изменения языка были рассмотрены несколько раз и отклонены:

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

Вы можете создать фабричный метод:

Но это не намного лучше, чем ваш первый рефакторинг.

Для большей гибкости он может быть общим:

В Java 9 мы можем легко инициализировать ArrayList в одну строку:

Этот новый подход Java 9 имеет много преимуществ по сравнению с предыдущими:

О самом компактном способе сделать это:

С коллекциями Eclipse (ранее GS Collections ), вы можете написать следующее:

Вы также можете более конкретно рассказать о типах и о том, являются ли они изменяемыми или неизменяемыми.

Вы также можете сделать то же самое с наборами и сумками:

Примечание. Я являюсь коммиттером коллекций Eclipse.

Вот еще один способ:

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

Вы можете использовать следующие утверждения:

Фрагмент кода:

(должен быть комментарий, но слишком длинный, поэтому новый ответ). Как уже упоминали другие, метод Arrays.asList имеет фиксированный размер, но это не единственная проблема с ним. Он также не очень хорошо обрабатывает наследование. Например, предположим, у вас есть следующее:

Вышеуказанное приводит к ошибке компилятора, потому что List (то есть то, что возвращает Arrays.asList) не является подклассом List , даже если вы можете добавить объекты типа B в List объект. Чтобы обойти это, вам нужно сделать что-то вроде:

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

Но так как вы жаловались на то, что хотите ArrayList, вы должны сначала знать, что ArrayList является подклассом List, и вы можете просто добавить эту строку:

Хотя это может заставить вас жаловаться на «производительность».

В этом случае для меня не имеет смысла, почему, поскольку ваш список предопределен, он не был определен как массив (так как размер известен во время инициализации). И если это вариант для вас:

Если вам не нужны незначительные различия в производительности, вы также можете очень просто скопировать массив в ArrayList:

Хорошо, но в будущем вам понадобится не только название места, но и код страны. Предполагая, что это все еще предопределенный список, который никогда не изменится во время выполнения, тогда будет уместно использовать набор enum , который потребует повторного -компиляция, если список необходимо изменить в будущем.

У перечислений есть статический метод values , который возвращает массив, содержащий все значения перечисления в порядке их объявления, например

В этом случае, я думаю, вам не нужен ваш ArrayList.

P.S. Рандяа продемонстрировал еще один замечательный способ использования статического служебного метода Collections.addAll .

Java 9 имеет следующий метод для создания списка неизменяемого :

который легко адаптируется для создания изменяемого списка, если это необходимо:

Инициализация ArrayList в одной строке

Я хочу создать список опций для целей тестирования. Сначала я так и сделал:

Затем я изменил код следующим образом:

Есть ли лучший способ сделать это?

25 Ответов

Было бы проще, если бы вы просто объявили его как List — это обязательно должно быть ArrayList?

Или если у вас есть только один элемент:

Это будет означать, что places является неизменяемым (попытка изменить его вызовет исключение UnsupportedOperationException ).

Чтобы создать изменяемый список, который является конкретным ArrayList , вы можете создать ArrayList из неизменяемого списка:

На самом деле, вероятно, «best» способ инициализации ArrayList -это метод, который вы написали, так как ему не нужно создавать новый List в любом случае:

Загвоздка в том, что для обращения к этому экземпляру list требуется совсем немного набора текста.

Существуют альтернативы, такие как создание анонимного внутреннего класса с инициализатором экземпляра (также известного как » инициализация двойной скобки»):

Однако я не слишком люблю этот метод, потому что в конечном итоге вы получаете подкласс ArrayList , который имеет инициализатор экземпляра, и этот класс создается только для создания одного объекта-это просто кажется мне немного излишним.

Было бы неплохо, если бы предложение о коллекционных литералах для Project Coin было принято (оно должно было быть введено в Java 7, но вряд ли будет частью Java 8).):

К сожалению, это не поможет вам здесь , так как он будет инициализировать неизменяемый List , а не ArrayList , и, кроме того, он еще не доступен, если когда-нибудь будет доступен.

Читать еще:  Программа для восстановления удаленных файлов из корзины

Простой ответ

В Java 10, 11, 12 или позже:

В Java 9 или позже:

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

Java 8 или раньше:

Это даст вам List , поддержанный массивом, поэтому он не может изменить длину.
Но вы можете вызвать List.set , так что он все еще изменчив.

Вы можете сделать Arrays.asList еще короче с помощью статического импорта:

Который любой современный IDE предложит и автоматически сделает за вас.
Например, в IntelliJ IDEA вы нажимаете Alt+Enter и выбираете Static import method. .

Однако я не рекомендую сокращать метод Java 9 List.of , потому что наличие только of приводит к путанице.
List.of уже достаточно короткий и хорошо читается.

Используя Stream с

Почему это должно быть List ?
С Java 8 или более поздней версией вы можете использовать Stream , который является более гибким:

Вы можете объединить Stream s:

Или вы можете перейти от Stream к List :

Но предпочтительно, просто используйте Stream , не собирая его в List .

Если вам действительно конкретно нужен java.util.ArrayList

(Вы, вероятно, не знаете.)
Процитировать JEP 269 (Курсив мой):

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

Если вы хотите как заранее заполнить ArrayList , так и добавить к нему впоследствии (почему?), использовать

или в Java 8 или раньше:

или с помощью Stream :

Но опять же, лучше просто использовать Stream напрямую, а не собирать его в List .

Программа для интерфейсов, а не для реализаций

Вы сказали, что объявили список как ArrayList в своем коде, но вы должны сделать это только в том случае, если вы используете какой-то член ArrayList , которого нет в List .

Чего вы, скорее всего, и не делаете.

Обычно вы должны просто объявить переменные с помощью наиболее общего интерфейса , который вы собираетесь использовать (например , Iterable , Collection или List ), и инициализировать их с помощью конкретной реализации (например, ArrayList , LinkedList или Arrays.asList() ).

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

Например, если вы передаете ArrayList в void method(. ) :

Другой пример-всегда объявлять переменную InputStream , хотя обычно это FileInputStream или BufferedInputStream , потому что в один прекрасный день Вы или кто-то другой захотите использовать какой-то другой тип InputStream .

Если вам нужен простой список размера 1:

Если вам нужен список из нескольких объектов:

С гуавой вы можете писать:

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

Литералы коллекции не попали в Java 8, но можно использовать Stream API для инициализации списка в одной довольно длинной строке:

Если вам нужно убедиться, что ваш List — это ArrayList :

С Java 9 , как предложено в JDK Enhancement Proposal-269, это может быть достигнуто с помощью литералов коллекции теперь как —

Также аналогичный подход применим и к Map —

что аналогично предложению коллекционных литералов , как указано в @coobird, а также. Далее уточняется в документе JEP, а также —

Альтернативы

Языковые изменения были рассмотрены несколько раз и отклонены:

Язык предложения были отложены в сторону, отдав предпочтение предложению, основанному на библиотеке, как резюмируется в этом сообщении.

Вы можете создать фабричный метод:

Но это не намного лучше, чем ваш первый рефакторинг.

Для большей гибкости он может быть универсальным:

В Java 9 мы можем легко инициализировать ArrayList в одной строке:

Этот новый подход Java 9 имеет много преимуществ по сравнению с предыдущими:

Смотрите этот пост для получения более подробной информации -> в чем разница между List.of и Arrays.asList?

С помощью Eclipse коллекций Вы можете написать следующее:

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

Вы также можете сделать то же самое с наборами и сумками:

Примечание: Я являюсь коммиттером для Eclipse коллекции.

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

О самом компактном способе сделать это:

Вот еще один способ:

(Должен быть комментарий, но слишком длинный, поэтому новый ответ). Как уже упоминалось, метод Arrays.asList имеет фиксированный размер, но это не единственная проблема с ним. Он также не очень хорошо справляется с наследованием. Например, предположим, что у вас есть следующее:

Вышеизложенное приводит к ошибке компилятора, поскольку List (то есть то, что возвращается Arrays.asList) не является подклассом List , даже если вы можете добавить объекты типа B к объекту List . Чтобы обойти это, вам нужно сделать что-то вроде:

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

Вы можете использовать следующие инструкции:

фрагмент кода:

Но поскольку вы жаловались на то, что хотите ArrayList, вы должны сначала знать, что ArrayList-это подкласс списка, и вы можете просто добавить эту строку:

Хотя, это может заставить вас пожаловаться на ‘performance’.

В этом случае для меня не имеет смысла, почему, поскольку ваш список предопределен, он не был определен как массив (поскольку размер известен на момент инициализации). И если это вариант для вас:

Если вы не заботитесь о незначительных различиях в производительности, то вы также можете скопировать массив в ArrayList очень просто:

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

должен был стать:

Перечисления имеют статический метод values , который возвращает массив, содержащий все значения перечисления в том порядке, в котором они объявлены, например::

В таком случае, я полагаю, вам не понадобится ваш ArrayList.

P.S. Randyaa продемонстрировал еще один хороший способ, используя метод статической утилиты Collections.addAll .

Java 9 имеет следующий метод для создания неизменяемого списка:

который легко адаптируется для создания изменяемого списка, если требуется:

Аналогичные методы доступны для Set и Map .

Списочный массив ArrayList

В Java массивы имеют фиксированную длину и не могут быть увеличены или уменьшены. Класс ArrayList реализует интерфейс List и может менять свой размер во время исполнения программы, при этом не обязательно указывать размерность при создании объекта. Элементы ArrayList могут быть абсолютно любых типов в том числе и null.

Пример создания объекта ArrayList

Можно инициализировать массив на этапе определения. Созданный объект list содержит свойство size. Обращение к элементам массива осуществляется с помощью метода get(). Пример :

Добавление элемента в массив ArrayList, метод add

Работать с ArrayList просто: необходимо создать объект и вставлять созданные объекты методом add(). Обращение к элементам массива осуществляется с помощью метода get(). Пример:

Замена элемента массива ArrayList, метод set

Чтобы заменить элемент в массиве, нужно использовать метод set() с указанием индекса и новым значением.

Удаление элемента массива ArrayList, метод remove

Для удаления элемента из массива используется метод remove(). Можно удалять по индексу или по объекту:

ПРИМЕЧАНИЕ: элементы, следующие после удалённого элемента, перемещаются на одну позицию ближе к началу. То же самое относится и к операции вставки элемента в середину списка.

Для очистки всего массива используется метод clear():

Определение позиции элемента ArrayList, метод indexOf

В списочном массиве ArrayList существует метод indexOf(), который ищет нужный элемент и возвращает его индекс.

Отсчёт в массиве начинается с 0, если индекс равен 2, значит он является третьим в массиве.

Проверка наличие элемента в ArrayList, метод contains

Чтобы узнать, есть в массиве какой-либо элемент, можно воспользоваться методом contains(), который вернёт логическое значение true или false в зависимости от присутствия элемента в наборе :

Понятно, что в массиве никаких овощей быть не может, поэтому в консоле будет отображено false.

Создание массива из элементов ArrayList, метод toArray

Для конвертирования набора элементов в обычный массив необходимо использовать метод toArray().

Интерфейс List

java.util.List является интерфейсом и его следует использовать вместо ArrayList следующим образом :

Или укороченный вариант для Java 7:

В примере тип ArrayList заменен на List, но в объявлении оставлен new ArrayList(). Всё остальное остаётся без изменений. Это является рекомендуемым способом.

Интерфейс List реализует более общий интерфейс коллекции Collection.

Преобразование массива в список, Arrays

Для создания массива можно не только добавлять по одному объекту через метод add(), но и сразу массив с использованием Arrays.asList(. ).

Пример создания и инициализации массива из объектов Integer.

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

Как объявить и инициализировать массив в Java?

как объявить и инициализировать массив в Java?

19 ответов

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

для примитивных типов:

для классов, например String , Это-же:

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

существует два типа массива.

Одномерный Массив

синтаксис значений по умолчанию:

или (менее предпочтительно)

синтаксис с заданными значениями (инициализация переменной / поля):

или (менее предпочтительно)

Примечание: Для удобства int[] num предпочтительнее, потому что он ясно говорит, что вы говорите здесь о массиве. Иначе никакой разницы. Не все.

многомерный массив

декларация

инициализации

рваный массив (или непрямой массив)

Итак, здесь мы явно определяем столбцы.
Иначе:

для Доступ:

рваные массивы многомерные массивы.
Для объяснения см. подробности многомерного массива в официальные учебники java

также допустимо, но я предпочитаю скобки после типа, потому что легче увидеть, что тип переменной на самом деле является массивом.

существуют различные способы объявления массива в Java:

вы можете найти более подробную информацию в Sun учебник сайт и JavaDoc.

Я считаю, это полезно, если вы понимаете каждую часть:

Type[] — это тип на переменная called name («имя» называется идентификатор). Литерал «Type» является базовым типом, а скобки означают, что это тип массива этой базы. Типы массивов, в свою очередь, являются собственными типами, что позволяет создавать многомерные массивы типа Type[][] (массив типа[]). Ключевое слово new говорит выделить память для нового массива. Число между скобками говорит о том, насколько большим будет новый массив и сколько памяти нужно выделить. Например, если Java знает, что базовый тип Type занимает 32 байта, и вы хотите массив размером 5, он должен внутренне выделить 32 * 5 = 160 байт.

вы также можете создавать массивы с уже имеющимися значениями, такими как

, который не только создает пустое пространство, но и наполняет эти ценности. Java может сказать, что примитивы целых чисел и что их 5, поэтому размер массива можно определить неявно.

ниже представлены объявления массива, но массив не инициализируется:

ниже показано объявление, а также инициализация массива:

теперь следующее также показывает объявление, а также инициализацию массива:

но этот третий показывает свойство анонимного создания массива-объекта, на которое указывает ссылочная переменная «myIntArray», поэтому, если мы напишем просто » new int [] <1,2,3>; » тогда вот как можно создать анонимный объект-массив.

если мы просто пишем:

это не объявление массива, но следующий оператор делает вышеуказанное объявление полным:

объявляет массив с именем arrayName размера 10 (у вас есть элементы от 0 до 9 для использования).

кроме того, если вы хотите что-то более динамичное, есть интерфейс списка. Это не будет выполнять, как хорошо, но является более гибким:

существует два основных способа создания массива:

Этот, для пустого массива:

и этот, для инициализированного массива:

вы также можете сделать многомерные массивы, как это:

возьмем примитивный тип int например. Существует несколько способов объявить и int время:

где во всех этих, Вы можете использовать int i[] вместо int[] i .

С отражением, вы можете использовать (Type[]) Array.newInstance(Type.class, capacity);

обратите внимание, что в параметрах метода, . указано variable arguments . По сути, любое количество параметров прекрасно. Это проще объяснить с помощью кода:

внутри метода, varargs рассматривается как нормальный int[] . Type. может использоваться только в параметрах метода, поэтому int. i = new int[] <> не будет компилироваться.

обратите внимание, что при прохождении int[] к методу (или любому другому Type[] ), вы не можете использовать третий способ. В заявлении int[] i = ** , компилятор предполагает, что <. >означает int[] . Но это потому, что вы объявляете переменную. При передаче массива методу объявление должно быть либо new Type[capacity] или new Type[] <. >.

Многомерная Массивы

многомерные массивы гораздо сложнее иметь дело. По сути, 2D-массив — это массив массивов. int[][] означает массив int[] s. Ключ в том, что если int[][] объявлен int[x][y] , максимальный индекс i[x-1][y-1] . По сути, прямоугольный int[3][5] — это:

Ссылка на основную публикацию
Adblock
detector