Java - Warum nennen wir ein Array einen "Vektor"?

20

Ich lese ein Buch über Java-Programmierung und möchte bestätigen, dass ich die Definition des Wortes "Vektor" verstehe. Wikipedia sagt, der Vektor sei "ein eindimensionales Array", Quelle http://en.wikipedia.org/wiki/Vector .

Wäre es nicht einfacher, das Array einfach als Array zu bezeichnen? Gibt es einen Grund, warum wir eine so ausgefallene Sprache wie "Vektor" verwenden müssen? Gibt es einen Unterschied zwischen einem Array und einem Vektor?


Bildbeschreibung hier eingeben

Quelle: Cracking the Coding Interview, 4. Auflage, von Gayle McDowell, Seite 47.

FAQ
F - Warum hast du das nicht auf english.stackexchange.com gepostet?
A - Weil ich denke, dass nur Informatiker eine gute Antwort haben werden.

davidjhp
quelle
1
Vektoren sind nicht mit ArrayLists identisch, da sie über eine integrierte Synchronisation verfügen. Weitere Informationen hier: stackoverflow.com/questions/2986296/…
Jeroen Vannevel
Off-Topic: Der Begriff "Vektor" wird nicht nur in Java verwendet. 1. Die C ++ - Bibliothek hat std::vector<…>(dynamisch große "Arrays"). 2. Die CLR (.NET Runtime) unterscheidet auch zwischen "Arrays" und "Vektoren", wobei letzteres ein Sonderfall der ersteren ist, nämlich eindimensionale, nullbasierte. Diese Unterscheidung ist wichtig, da es spezielle Optimierungen für Vektoren gibt. 3. In der Mathematik wird ein n- Tupel reeller Zahlen manchmal auch als "Vektor" bezeichnet.
Stakx
1
@JeroenVannevel Ich denke, Sie haben die Verwechslung zwischen der Vector-Klasse und dem Konzept des Vektors vorgenommen, der als eindimensionales Array betrachtet werden kann.
C.Champagne
OT, wenn Sie eine Antwort von Informatikern wünschen, warum hier posten und nicht bei cs.stackexchange? Und warum die Java-Flagge? Soweit ich mich aus meiner Programmierstunde erinnere, gibt es Array und dann eine verknüpfte Liste. Mit Ausnahme von Arrays werden Container (Vektor, Liste, Karte, Heap usw.) als verknüpfte Liste implementiert.
imel96
2
Warum nennen wir einen Vektor ein Array?
m3th0dman

Antworten:

35

In der typischen Verwendung kann ein "Array" entweder ein eindimensionales Array oder ein mehrdimensionales Array bedeuten. In der Mathematik ist eine Matrix ein zweidimensionales Array, während ein Vektor ein eindimensionales Array ist.

Greg Hewgill
quelle
8
Off-Topic: Ist ein "Skalar" in der Mathematik ein 0-dimensionales Array?
Stakx
6
@stakx: Ja, das ist genau richtig. Normalerweise ist ein Skalar nur ein Skalar, niemand würde es als "0-dimensionales Array" bezeichnen. Aber die Idee ist richtig.
Greg Hewgill
2
Es ist genauer zu sagen, dass sie alle Tensoren sind. Aus Wolfram Mathworld: "Tensoren sind Verallgemeinerungen von Skalaren (die keine Indizes haben), Vektoren (die genau einen Index haben) und Matrizen (die genau zwei Indizes haben) zu einer beliebigen Anzahl von Indizes." (Rowland, Todd und Weisstein, Eric W. "Tensor" von MathWorld - Eine Wolfram- Webressource . Mathworld.wolfram.com/Tensor.html )
SOFe
In der Mathematik ist ein Vektor kein eindimensionales Array. Ein Vektor ist ein Element eines Vektorraums, dh eine Menge, in der Elemente hinzugefügt und mit Skalaren multipliziert werden können.
Mlainz
Der bekannteste Vektorraum ist R ^ n, die Menge der "Arrays" von Zahlen mit elementweiser Addition und Multiplikation. Die Menge der reellen Funktionen ist ebenfalls ein Vektorraum, aber normalerweise werden Funktionen nicht als Arrays betrachtet. Ein Array von Zeichen wäre kein Vektorraum, da es keine offensichtliche Wahl für Addition und Multiplikation gibt. In der Fachsprache Mathematik ist ein Array ein Tupel oder eine endliche Folge. Weitere Beispiele für Tupel, die keine Vektoren sind, finden Sie unter en.wikipedia.org/wiki/Vector_(mathematics_and_physics) .
Mlainz
10

Vektoren sind keine Arrays. Jedenfalls keine klassischen. Sie sind dynamische Arrays. Sie können nach Bedarf geändert werden, anstatt eine feste Größe zu haben. Sie sind daher ArrayLists ähnlich, aber nicht ganz gleich.

ArrayLists unterscheiden sich von Vectors darin, dass Vectors einzelne Operationen synchronisieren, was Sie insbesondere für Jon Skeet aus Gründen der Parallelität nicht möchten . Aus diesem Grund wurde Vector zugunsten von ArrayList abgelehnt, einige nennen es jedoch weiterhin Vector.

Der Name leitet sich ursprünglich vom mathematischen Begriff für eine eindimensionale Matrix ab. Dies ist trotz der Struktur, die tatsächlich ein n-Tupel ist .

Weltingenieur
quelle
2
Ich denke, Sie haben die Verwechslung zwischen der Vector-Klasse und dem Vektorkonzept, das als eindimensionales Array betrachtet werden kann, und dem, was Sie für Java beachten, hergestellt.
C.Champagne
@ C.Champagne Er hat ein Java-Beispiel verwendet, also habe ich ihm das gegeben. Ich habe die Definition für das mathematische Konstrukt hinzugefügt, das übrigens auch technisch kein "Vektor" ist.
Welt Ingenieur
2
Ich bin bei C.Champagne. Wenn sie Vektor (die Klasse) gemeint hätten, hätte der Text ein Großbuchstaben V verwendet. Sie verwendeten ein Kleinbuchstaben v, das die klassische (nicht die Klasse) Definition eines Vektors angibt.
Rig
Ähm, Vektoren heißen in Mathematik Vektoren . Was meinst du mit "auch technisch kein" Vektor "?
Andres F.
@AndresF. Eine Menge von Zahlen wie ein Array oder ein "Vektor" wäre nach meinem Verständnis ein n-Tupel, da es sich um eine diskrete Sammlung von Werten handelt.
Welt Ingenieur
4

Normalerweise sind Vektor und Array dasselbe und werden beim Programmieren synonym verwendet. Dies ist an den meisten Orten der Fall, sodass Sie sich die meiste Zeit nicht darum kümmern sollten.

Das heißt, Sprache ist ungenau und manchmal haben wir Wörter mit unterschiedlichen Bedeutungen in unterschiedlichen Kontexten, die am Ende dasselbe bedeuten, oder ein Wort mit zwei oder mehr unterschiedlichen Bedeutungen.

In C ist ein Array eine Reihe von Datenelementen des gleichen Typs, die zusammenhängend im Speicher gespeichert sind. Java hat diese Bedeutung geerbt. Es ist nicht dasselbe wie eine Liste oder ein Vektor, da Arrays grundlegender sind als diese.

Ein Vektor ist ein mathematisches Konstrukt, das als ein Objekt definiert ist, das zu einem anderen Objekt desselben Typs hinzugefügt oder mit einer beliebigen reellen (oder komplexen) Zahl multipliziert werden kann, was zu einem anderen Vektor desselben Typs führt. Es hat auch einige andere Eigenschaften, die sehr nützlich sind.

Ein Vektor hat eine Dimension . Es ist die minimale Anzahl verschiedener Vektoren, die kombiniert werden müssen, um jeden möglichen Vektor dieses Typs zu erhalten. Geschwindigkeit und Beschleunigung sind dreidimensionale Vektoren, da der Raum drei Basisrichtungen hat. Durch Hinzufügen eines Vielfachen dieser drei Basisrichtungen können Sie eine beliebige Position im Raum erhalten. Die Position in einer Ebene ist ein zweidimensionaler Vektor, und einzelne Zahlen sind eindimensionale Vektoren.

Eine Möglichkeit, einen Vektor der Dimension n darzustellen, besteht darin, ein Array von n Elementen zu verwenden, von denen jedes darstellt, wie viel von jedem Basisvektor Sie hinzufügen müssen, um zu Ihrem Vektor zu gelangen.

Da Sie einen Vektor mit einer Reihe von Elementen mit der Zeit darstellen können, wurden die beiden Konzepte gleichgesetzt. Daher sind sie an vielen Stellen einfach dasselbe und in einigen Sprachen werden Arrays als Vektoren bezeichnet.

Ein anderer Fall, in dem ein Wort zwei verschiedene Bedeutungen hat, ist beispielsweise die Dimension . Die Wikipedia-Definition eines Vektors als eindimensionales Array ist ein Beispiel. Sie sprechen hier nicht von Vektordimensionen. Sie sprechen über die Computerdarstellung der Datenstruktur. Ein dreidimensionaler Vektor kann durch ein "eindimensionales" Array der Größe 3 dargestellt werden. 3 Zahlen in einer Linie. Eine 3x3-Matrix kann durch ein "2-dimensionales" Array dargestellt werden, das von Programmierern als Array von Arrays bezeichnet wird. Eine 3x3-Matrix ist aber auch ein mathematischer Vektor der Dimension 9 (da sie alle Eigenschaften eines Vektors hat) und 9 Zahlen hat. Verwirrend, nicht wahr?

Wie auch immer, ich denke die Antwort ist einfach: keine Sorge. Es hängt alles vom Kontext ab. Die beiden Wörter haben unterschiedliche Ursprünge, aber im Kontext von Datenstrukturen bedeuten sie , wenn sie Vektor sagen , genau Array .

Andre Manoel
quelle
Ich denke nicht, dass das wahr ist. In fast allen von mir durchgeführten Dokumentationen impliziert Array eine feste Größe. Vector impliziert, dass die Struktur dynamisch dimensioniert werden kann (aber nicht muss). Die mathematischen Definitionen der Begriffe sind im Kontext der Programmierung unglaublich irreführend.
Chuu
-1

Die obigen Antworten beschreiben, warum sich diese Klasse von einem "Array" unterscheidet - und ich vermute, dass ein anderer Name verwendet wird, weil Programmierer durch einen gut organisierten Namespace unterstützt werden - mit anderen Worten, wenn Sie von einem "Vector" sprechen klar genau, welche Klasse Sie meinen, während wenn alle ähnlichen Klassen nur Arrays wären, wäre es nicht ganz klar.

adrianmcmenamin
quelle
-1

Ich denke, der Begriff "Vektor" stammt aus C ++ 's std :: vector. Es erschien vor Java und C #.

Denis Gladkiy
quelle
3
Bitte (nachdrücklich) erwägen Sie, einen externen Verweis hinzuzufügen, um Ihre Meinung zu stützen.
-1

Es ist nur eine schlampige Bearbeitung.

In früheren Versionen von Java war ArrayList nicht enthalten. Anstelle von ArrayList wurde Vector verwendet. ArrayList wurde später hinzugefügt und wird jetzt für die meisten Zwecke anstelle von Vector verwendet. Ich gehe davon aus, dass das Buch geschrieben wurde, bevor ArrayList hinzugefügt wurde, und dass dieser Verweis auf vector bei der Aktualisierung des Texts nicht vorhanden war.

Ich schlage vor, Sie vermeiden diese Art von "alles in zehn Minuten lernen" -Buch. Im Allgemeinen werden sie schnell und schlampig geschrieben. Mit diesem Wissensstand bekommen Sie keinen Job in einem seriösen Geschäft.

Suchen Sie stattdessen nach gut besprochenen Büchern anerkannter Anwender der behandelten Technologie und lesen Sie sie, um sie besser zu verstehen.

Kevin Cline
quelle
1
"Frühe Versionen ... hatten"? Und was ist java.util.Vector?
Wiedereinsetzung von Monica - M. Schröder
1
Veraltet ist java.util.Vector. :-)
Brian Knoblauch
-1

Der Begriff Vektor stammt aus der Technik / Physik. Vektoren stellen zwei- und dreidimensionale Linien dar, die eine Richtung haben. Angenommen, ein Projektil hat eine horizontale Geschwindigkeit von 20 m / s und eine vertikale Geschwindigkeit von 10 m / s. Sie würden dies also als (20,10) darstellen. Es fliegt in einer Art Diagonale nach rechts. Sehen Sie sich also an, wie aus mathematischen Geschwindigkeitsvektoren Arrays oder Vektoren werden.

WebMonster
quelle
-2

Wir bezeichnen Arrays nicht als Vektoren. Entweder haben Sie Ihre Quelle missverstanden oder die Quelle hat Java missverstanden oder beides.
Ein Array ist eine ganz andere Datenstruktur als ein Vektor, die sich wiederum von einer Liste unterscheidet (die in Ihrem eingefügten Code verwendet wird).

Natürlich könnte ein mathematischer Vektor in Java unter Verwendung eines der drei Mechanismen implementiert werden, und unter der Haube könnten entweder der Vektor oder die Liste oder beide unter Verwendung von Arrays implementiert werden.

jwenting
quelle