WedX - журнал о программировании и компьютерных науках

Как посчитать количество элементов в многомерных массивах?

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

вот что я знаю
int[] x= new int[2];
этот одномерный массив состоит из двух элементов.

int[][] y=new int[2][3];
этот двумерный массив состоит из шести элементов, верно? (2 х 3 = 6)

но когда я смотрю на то, как на самом деле создается двумерный массив,

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

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

  3. затем создаются еще 2 одномерных массива, каждый из которых состоит из 3 элементов, которые могут хранить значения типа int. и адреса памяти этих двух одномерных массивов присваиваются двум элементам, которые были сделаны ранее внутри объекта.
  4. затем адрес памяти этого объекта присваивается переменной y, которая находится в стеке.

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

все эти вопросы меня беспокоят, потому что y.length = 2 и y[0].length = 3

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


Ответы:


1

Да, вы абсолютно правы. Java не имеет двумерных массивов как таковых. Все, что у него есть, это массивы, содержащие массивы, и синтаксический сахар (new int[2][3]) для их создания.

Но у вас действительно может быть массив, содержащий массивы разной длины:

int[][] array = new int[2][];
array[0] = new int[5];
array[1] = new int[3];
System.out.println(Arrays.deepToString(array));
// prints [[0, 0, 0, 0, 0], [0, 0, 0]]

Итак, если вы получили int[][] и хотите узнать, сколько целых чисел он содержит, вам нужно пройтись по внешнему массиву и просуммировать длины внутренних массивов. Если у вас нет гарантии, что все внутренние массивы имеют одинаковую длину. В этом случае вы можете умножить длину внешнего массива на длину любого из внутренних массивов.

15.01.2017

2

В Java многомерные массивы на самом деле являются массивами массивов. Например, переменная двумерного массива с именем arr выглядит так:

int arr[][] = new int[4][5];

Это выделяет массив 4 на 5 и присваивает его обр. Концептуально этот массив будет выглядеть так, как показано на рисунке: введите здесь описание изображения

Когда вы выделяете память для многомерного массива, вам нужно указать память только для первого (самого левого) измерения. Остальные габариты можно выделить отдельно. Например:

int twoD[][] = new int[4][];
twoD[0] = new int[5];
twoD[1] = new int[5];
twoD[2] = new int[5];
twoD[3] = new int[5];

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

15.01.2017

3

Вы можете сгладить свой многомерный массив с помощью этого метод и вызовите List#size().

Он даже сгладит вложенные списки, наборы, карты и очереди.

15.01.2017
Новые материалы

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

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

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]