Java - Почему мы называем массив «вектором»?

20

Я читаю книгу по программированию на Java и хочу подтвердить, что я понимаю определение слова «вектор». В Википедии говорится, что вектор - это «одномерный массив», источник http://en.wikipedia.org/wiki/Vector .

Не проще ли назвать массив просто массивом? Есть ли какая-то причина, по которой нам нужно использовать такой причудливый язык, как «вектор»? Есть ли разница между массивом и вектором?


введите описание изображения здесь

Источник: «Взлом кодового интервью», 4-е издание, Гейл Макдауэлл, страница 47.

FAQ
Q - Почему вы не опубликовали это на english.stackexchange.com?
A - Потому что я думаю, что только люди, ориентированные на информатику, будут иметь хороший ответ.

davidjhp
источник
1
Векторы не совпадают с ArrayLists, а именно из-за встроенной синхронизации. Более подробная информация здесь: stackoverflow.com/questions/2986296/…
Jeroen Vannevel
Не по теме: термин «вектор» используется не только в Java. 1. Библиотека C ++ имеет std::vector<…>(«массивы» динамического размера). 2. CLR (среда выполнения .NET) также различает «массивы» и «векторы», причем последний является частным случаем первого, а именно одномерного, основанного на нуле. Это различие важно, потому что есть специальные оптимизации для векторов. 3. В математике n- ряд вещественных чисел также иногда называют «вектором».
stakx
1
@JeroenVannevel Я думаю, вы перепутали класс Vector с понятием vector, которое можно рассматривать как одномерный массив.
C.Champagne
ОТ, если вы хотите получить ответ от специалистов по информатике, зачем писать здесь, а не на cs.stackexchange? И почему флаг Java? Из того, что я помню из моего класса программирования, есть массив, а затем есть связанный список. За исключением массива, контейнеры (вектор, список, карта, куча и т. Д.) Реализованы как связанный список.
imel96
2
Почему мы называем вектор массивом?
m3th0dman

Ответы:

35

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

Грег Хьюгилл
источник
8
Не по теме: является ли в математике «скаляр» 0-мерным массивом?
stakx
6
@stakx: Да, это точно. Обычно скаляр - это просто скаляр, никто бы не назвал его «0-мерным массивом». Но идея верна.
Грег Хьюгилл
2
Точнее сказать, что все они являются тензорами. От Wolfram Mathworld: «Тензоры - это обобщения скаляров (которые не имеют индексов), векторов (которые имеют ровно один индекс) и матриц (которые имеют ровно два индекса) на произвольное количество индексов». (Роуленд, Тодд и Вайстейн, Эрик В. "Тензор". От MathWorld - веб-ресурса Wolfram. Mathworld.wolfram.com/Tensor.html )
SOFe
Для чего стоит, в математике вектор не является одномерным массивом. Вектор - это элемент векторного пространства, то есть набор, в который элементы можно добавлять и умножать на скаляры.
Мленц
Самым известным векторным пространством является R ^ n, набор «массивов» чисел с поэлементным сложением и умножением. Набор реальных функций также является векторным пространством, но обычно люди не думают о функциях как о массивах. Массив символов не будет векторным пространством, поскольку нет очевидного выбора сложения и умножения. В математическом жаргоне массив - это кортеж или конечная последовательность. Смотрите en.wikipedia.org/wiki/Vector_(matmatics_and_physics) для большего количества примеров кортежей, которые не являются векторами.
mlainz
10

Векторы не совсем массивы. Во всяком случае, не классические. Это динамические массивы. Они могут быть изменены по мере необходимости, а не фиксированного размера. Таким образом, они похожи на ArrayLists, но не совсем так.

Списки массивов отличаются от Векторов тем, что Векторы синхронизируют отдельные операции, что не нужно для целей параллелизма, в частности, для Jon Skeet . Таким образом, Vector устарела в пользу ArrayList, но некоторые по-прежнему называют его Vector.

Название первоначально происходит от математического термина для 1 мерной матрицы. Это несмотря на то, что структура на самом деле является n-кортежем .

Мировой инженер
источник
2
Я думаю, что вы перепутали класс Vector с понятием vector, которое можно рассматривать как одномерный массив и обратите внимание на специфические особенности Java.
C.Champagne
@ C.Champagne Он использовал пример Java, вот что я ему дал. Я добавил определение для математической конструкции, которая, кстати, технически тоже не является «вектором».
Мировой инженер
2
Я с @ C.Champagne. Если бы они имели в виду Vector (класс), в тексте использовалась бы заглавная буква V. Они использовали строчную букву v, которая указывает на классическое (не классовое) определение вектора.
Рог
Гм, векторы называются векторами в математике . Что вы имеете в виду, "технически не" вектор ", а"?
Андрес Ф.
@AndresF. Я понимаю, что набор чисел, таких как массив или «вектор», будет n-кортежем, потому что это дискретный набор значений.
Мировой инженер
4

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

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

В C массив - это серия элементов данных одного типа, которые хранятся в памяти непрерывно. Ява унаследовала это значение. Это не то же самое, что List или Vector, так как массивы более простые, чем те.

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

Вектор имеет размерность . Это минимальное количество различных векторов, которые нужно объединить, чтобы получить все возможные векторы этого типа. Скорость и ускорение являются 3-мерными векторами, потому что пространство имеет 3 базовых направления, и, сложив кратные эти три базовых направления, вы можете получить любую позицию в пространстве. Положение на плоскости - это двумерный вектор, а отдельные числа - это одномерные векторы.

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

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

Другой случай, когда одно слово имеет два разных значения, например, измерение . Википедия, определение вектора как одномерного массива, является примером. Вы не говорите о векторном измерении здесь. Вы говорите о компьютерном представлении структуры данных. Трехмерный вектор может быть представлен «одномерным» массивом размера 3. 3 числа в строке. Матрица 3x3 может быть представлена ​​«двумерным» массивом, который программисты называют массивом массивов. Тем не менее, матрица 3x3 также является математическим вектором размерности 9 (поскольку она обладает всеми свойствами вектора) и имеет 9 чисел. Смущает, а?

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

Андре Маноэль
источник
Я не думаю, что это правда. Почти во всей документации, с которой я столкнулся, Array подразумевает фиксированный размер, Vector подразумевает, что структура может (но не обязательно) иметь динамический размер. Математические определения терминов невероятно вводят в заблуждение в контексте программирования.
Chuu
-1

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

adrianmcmenamin
источник
-1

Я думаю, что термин «вектор» произошел от std :: vector из C ++. Это появилось до Java и C #.

Денис Гладкий
источник
3
Пожалуйста (настоятельно) рассмотрите возможность добавления внешней ссылки, чтобы подтвердить свое мнение.
-1

Это просто небрежное редактирование.

Ранние версии Java не включали ArrayList. Вместо ArrayList использовался Vector. ArrayList был добавлен позже и теперь используется вместо Vector для большинства целей. Я ожидаю, что книга была написана до того, как был добавлен ArrayList, и что при обновлении текста этой ссылки на вектор не было.

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

Вместо этого ищите хорошо проверенные книги признанных пользователей рассматриваемой технологии и читайте для понимания.

Кевин Клайн
источник
1
"Ранние версии ... были"? А что есть java.util.Vector?
Восстановить Монику - М. Шредер,
1
Устаревшим является то, что является java.util.Vector. :-)
Брайан Кноблаух
-1

Термин вектор происходит от инженерии / физики. Векторы представляют собой 2- и 3-мерные линии, которые имеют направление. Например, скажем, снаряд имеет горизонтальную скорость 20 м / с и вертикальную скорость 10 м / с. Таким образом, вы бы представляли это как (20,10). Он летит по диагонали вправо, так что теперь посмотрим, как математически векторы скорости становятся массивами или векторами.

WebMonster
источник
-2

Мы не называем векторы массивов, либо вы неправильно поняли ваш источник, либо источник неправильно понял Java, либо и то, и другое.
Массив - это совершенно другая структура данных по сравнению с вектором, которая снова отличается от списка (который использует ваш вставленный код).

Конечно, математический вектор мог бы быть реализован в Java с использованием любого из трех механизмов, и под капотом любой из них или Vector, и List могли бы быть реализованы с использованием массивов.

jwenting
источник