Java - Чому масив ми називаємо "вектором"?


20

Я читаю книгу про програмування Java, і хочу підтвердити, що я розумію визначення слова "вектор". Вікіпедія говорить, що вектор - це "одновимірний масив", джерело http://en.wikipedia.org/wiki/Vector .

Чи не було б простіше назвати масив просто масивом? Чи є якась причина, що нам потрібно використовувати таку вигадливу мову, як "вектор"? Чи є різниця між масивом і вектором?


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

Джерело: Cracking the Coding Interview, 4th Edition, Gayle McDowell, стор. 47.

FAQ
- Чому ви цього не опублікували на сайті english.stackexchange.com?
A - Тому що я думаю, що тільки орієнтовані на інформатику люди матимуть хорошу відповідь.


1
Вектори не такі, як ArrayLists, а саме через вбудовану синхронізацію. Більш детальна інформація тут: stackoverflow.com/questions/2986296 / ...
Йерун Vannevel

Поза темою: Термін "вектор" використовується не просто на Java. 1. Бібліотека C ++ має std::vector<…>("масиви" динамічного розміру). 2. CLR (.NET runtime) також розрізняє "масиви" та "вектори", останній є окремим випадком перших, а саме одновимірних, нульових. Ця відмінність важлива, оскільки існують спеціальні оптимізації для векторів. 3. У математиці n- множина дійсних чисел також іноді називають "векторною".
stakx

1
@JeroenVannevel Я думаю, ви зробили плутанину між класом Vector і поняттям вектора, яке можна розглядати як одновимірний масив.
Ч. Шампань

OT, якщо ви хочете відповісти від людей з інформатики, навіщо публікувати тут, а не на cs.stackexchange? І чому прапор java? З того, що я пам'ятаю з мого класу програмування, є масив, а потім є пов'язаний список. За винятком масиву, контейнери (вектор, список, карта, купа тощо) реалізуються як пов'язані списки.
imela96

2
Чому ми називаємо вектор масивом?
m3th0dman

Відповіді:


35

У типовому використанні "масив" може означати або одновимірний масив, або багатовимірний масив. Також в математиці матриця - це двовимірний масив, а вектор - 1-мірний масив.


8
Поза темою: Чи є "скалярним" масивом у математиці 0-мірний масив?
stakx

6
@stakx: Так, саме так. Зазвичай скаляр - це просто скаляр, і ніхто насправді би не назвав це "0-мірним масивом". Але ідея правильна.
Грег Хьюгілл

2
Точніше сказати, що вони всі тензори. Від Вольфрама Mathworld: "Тензори - це узагальнення скалярів (у яких немає індексів), векторів (у яких рівно один індекс) та матриць (у яких рівно два індекси) на довільну кількість індексів". (Rowland, Todd and Weisstein, Eric W. "Tensor". From MathWorld - Веб-ресурс Wolfram. Mathworld.wolfram.com/Tensor.html )
SOFe

Для чого варто, що в математиці вектор не є одновимірним масивом. Вектор - це елемент векторного простору, тобто набір, в який елементи можна додавати і множити на скаляри.
mlainz

Найвідоміший векторний простір - R ^ n, набір "масивів" чисел з елементарним складанням і множенням. Набір реальних функцій також є векторним простором, але зазвичай люди не вважають функції масивами. Масив символів не буде векторним простором, оскільки немає очевидного вибору додавання та множення. У математичному жаргоні масив - це кортеж або кінцева послідовність. Див. En.wikipedia.org/wiki/Vector_(mathematics_and_physics) для отримання додаткових прикладів кортежів, які не є векторами.
mlainz

10

Вектори - це не зовсім масиви. Не класичні все одно. Вони є динамічними масивами. Їх можна змінити за потребою, а не мати фіксований розмір. Таким чином вони схожі на ArrayLists, але не зовсім однакові.

Списки ArrayListe відрізняються від Vectors тим, що Vectors синхронізують окремі операції - це те, що ви не хочете для цілей одночасності Jon Skeet . Таким чином, вектор припинився на користь ArrayList, але деякі все ще називають його вектором.

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


2
Думаю, ви зробили плутанину між класом Vector і поняттям вектора, яке можна розглядати як одновимірний масив, і ils відзначають специфічну для Java.
Ч. Шампань

@ C.Champagne Він використав приклад Java, тому я це йому і дав. Я додав визначення для математичної конструкції, яка, до речі, технічно також не є "вектором".
Світовий інженер

2
Я з @ C.Champagne. Якби вони мали на увазі вектор (клас), текст використовував би верхню літеру V. Вони використовували малу літеру v, яка вказує на класичне (а не класове) визначення вектора.
Rig

Гм, вектори називаються векторами з математики . Що ви маєте на увазі, "технічно не є" вектором "?
Андрес Ф.

@AndresF. Набір чисел, таких як масив або "вектор", було б n-кортежем, моє розуміння, оскільки це дискретна колекція значень.
Світовий інженер

4

Зазвичай вектор і масив - це одне і те ж, і вони використовуються взаємозамінно при програмуванні. Це в більшості місць, тому вам не варто багато про це турбуватися.

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

В масив С - це ряд однотипних елементів даних, які постійно зберігаються в пам'яті. Ява успадкував це значення. Це не те саме, що "Список" або "Вектор", оскільки масиви є основними, ніж ті.

А Вектор є математичною конструкцію , визначений як об'єкт , який може бути доданий до іншого об'єкту того ж типу, або бути помножена на який - небудь реальної (або комплексу) , в результаті чого кількості іншого вектора одного і того ж типу. Він також має кілька інших властивостей, які дуже корисні.

Вектор має вимір . Це мінімальна кількість різних векторів, які необхідно поєднувати, щоб отримати всі можливі векторні цього типу. Швидкість і прискорення - це тривимірні вектори, оскільки простір має 3 базових напрямки, і додавши кратні з цих трьох базових напрямків, ви можете отримати будь-яку позицію в просторі. Положення в площині - це двовимірний вектор, а окремі числа - одновимірні вектори.

Один із способів подання вектора розмірності n - це використання масиву з n елементів кожен з яких представляє, скільки кожного базового вектора ви повинні додати, щоб потрапити на ваш вектор.

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

Інший випадок, коли одне слово має два різні значення, наприклад, розмірність . Прикладом є вікіпедійне визначення вектора як одновимірного масиву. Ви не говорите тут про векторний вимір. Ви говорите про комп’ютерне представлення структури даних. 3-мірний вектор можна представити "одновимірним" масивом розміром 3. 3 числа в рядку. Матриця 3x3 може бути представлена ​​"двовимірним" масивом, який програмісти називають масивом масивів. Однак матриця 3x3 також є математичним вектором розмірності 9 (оскільки він має всі властивості вектора) і має 9 чисел. Заплутано, так?

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


Я не думаю, що це правда. Майже у всій документації, яку я перебігав через масив, мається на увазі фіксований розмір. Математичні визначення термінів неймовірно оманливі в контексті програмування.
Чуу

-1

Відповіді вище описують, чому цей клас відрізняється від "масиву" - і я підозрюю, що причина використання іншої назви полягає в тому, що програмістам допомагає добре організований простір імен - іншими словами, якщо говорити про "вектор", це чітко чітко визначте, який клас ви маєте на увазі, хоча якби всі подібні класи були просто масивами, це було б не зовсім зрозуміло.


-1

Я думаю, що термін "вектор" походить від st + :: вектор C ++. Він з'явився перед Java та C #.


3
Будь ласка, (настійно) подумайте про те, щоб додати зовнішнє посилання, щоб створити резервну думку.

-1

Це просто неохайне редагування.

Ранні версії Java не включали ArrayList. Замість ArrayList використовувався вектор. ArrayList був доданий пізніше і зараз використовується замість Vector для більшості цілей. Я очікую, що книга була написана до того, як додано ArrayList, і що коли текст оновлювався, цього посилання на вектор не було.

Я пропоную вам уникати подібного роду "вивчити все за десять хвилин". Зазвичай вони пишуться швидко і неохайно. Цей рівень знань не допоможе вам отримати роботу в серйозному магазині.

Натомість шукайте добре переглянуті книги визнаних користувачів розробленої технології та читайте їх для розуміння.


1
"Ранні версії ... мали"? А що таке java.util.Vector?
Відновіть Моніку - М. Шредер

1
Застаріле - це те, що таке java.util.Vector. :-)
Брайан Ноблеуч

-1

Термін вектор походить від інженерії / фізики. Вектори представляють 2 та 3 розмірні лінії, які мають напрямок. Наприклад, скажімо, снаряд має горизонтальну швидкість 20 м / с і вертикальну швидкість 10 м / с. Тож ви представляєте це як (20,10). Він летить на зразок діагоналі праворуч, тому тепер подивіться, як математичні вектори швидкості стають масивами ака векторами.


-2

Ми не називаємо вектори масивів, або ви неправильно зрозуміли своє джерело, або джерело неправильно зрозуміло Java, або те й інше.
Масив - це зовсім інша структура даних від вектора, яка знову відрізняється від списку (який використовує ваш вставлений код).

Звичайно, математичний вектор в Java може бути реалізований за допомогою будь-якого з трьох механізмів, і під кришкою або обидва, і вектор, і список можуть бути реалізовані за допомогою масивів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.