Java-为什么我们将数组称为“向量”?


20

我正在阅读有关Java编程的书,并希望确认我理解“向量”一词的定义。维基百科说向量是“一个一维数组”,来源http://en.wikipedia.org/wiki/Vector

将数组简单地称为数组会更简单吗?我们是否有任何理由需要使用这种奇特的语言作为“向量”?数组和向量之间有区别吗?


在此处输入图片说明

资料来源:《破解编码访谈》,第4版,盖尔·麦克道威尔,第47页。

常见问题
Q-为什么不将其发布在english.stackexchange.com上?
答:因为我认为只有面向计算机科学的人才能有一个好的答案。


1
向量与ArrayList不同,这是因为内置了同步。这里更多的信息:stackoverflow.com/questions/2986296/...
吉荣Vannevel

题外话:术语“向量”不仅在Java中使用。1. C ++库具有std::vector<…>(动态大小的“数组”)。2. CLR(.NET运行时)还区分“数组”和“向量”,后者是前者的特例,即一维,从零开始的向量。这种区别很重要,因为对向量有特殊的优化。3.在数学中,有时也将n个实数元组称为“向量”。
stakx

1
@JeroenVannevel我认为您在Vector类和可以视为一维数组的vector概念之间造成了混淆。
C.Champagne

OT,如果您想从计算机科学界人士那里得到答案,为什么要在这里发布而不是在cs.stackexchange上发布?以及为什么使用Java标志?根据我在编程课上所记得的,有一个数组,然后有一个链表。除数组外,容器(向量,列表,映射,堆等)都实现为链接列表。
imel96

2
为什么我们将向量称为数组?
m3th0dman

Answers:


35

在典型用法中,“数组”可以表示一维数组或多维数组。同样,在数学中,矩阵是二维数组,矢量是一维数组。


8
题外话:在数学中,“标量”是0维数组吗?
stakx

6
@stakx:是的,完全正确。通常,标量只是一个标量,没有人会实际将其称为“ 0维数组”。但是这个主意是对的。
2013年

2
准确地说它们都是张量。来自Wolfram Mathworld:“张量是标量(没有索引),向量(有一个索引)和矩阵(有两个索引)到任意数量索引的一般化。” (Rowland,Todd和Weisstein,Eric W.“ Tensor。”摘自MathWorld – Wolfram网络资源。mathworld.wolfram.com/Tensor.html
SOFe18年

值得一提的是,在数学中,向量不是一维数组。向量是向量空间的元素,即向量集,可以在其中添加元素并将其乘以标量。
mlainz

最著名的向量空间是R ^ n,它是具有元素逐加和乘法的数字“数组”集合。实函数集也是向量空间,但是通常人们不会将函数视为数组。字符数组将不是向量空间,因为没有明显的加法和乘法选择。用数学术语来说,数组是元组或有限序列。有关不是向量的元组的更多示例,请参见en.wikipedia.org/wiki/Vector_(mathematics_and_physics)
mlainz

10

向量并非完全是数组。反正不是古典的。它们是动态数组。可以根据需要调整大小,而不是固定大小。因此,它们与ArrayLists类似,但不完全相同。

ArrayLists与Vectors的不同之处在于,Vectors可以同步单个操作,而这对于并发目的是不希望的,尤其是对于Jon Skeet而言。因此不推荐使用Vector,而推荐使用ArrayList,但有些人仍将其称为Vector。

名称最初源自一维矩阵的数学术语。尽管该结构实际​​上是一个n元组


2
我认为您在Vector类和vector概念之间造成了混淆,可以将其视为一维数组,并且请注意Java的特定特性。
C.Champagne

@ C.Champagne他使用了Java示例,所以我给了他。我已经添加了数学构造的定义,顺便说一句,从技术上讲,它也不是“向量”。
世界工程师

2
我在@ C.Champagne。如果它们表示Vector(类),则文本将使用大写的V。他们使用小写字母v,表示向量的经典(不是类)定义。
钻机

嗯,向量在数学上称为向量。您是什么意思,“从技术上讲也不是'向量'”?
Andres F.

@AndresF。我理解一组像数组或“向量”之类的数字将是一个n元组,因为它是值的离散集合。
世界工程师

4

通常,向量数组是同一件事,在编程时可以互换使用。那是在大多数地方,所以大多数时候您不必为此担心。

就是说,语言是不精确的,有时我们在不同上下文中使用的单词具有不同的含义,最终意味着同一件事,或者一个单词具有两种或更多种不同的含义。

在C中的数组是一系列相同类型的数据元素,它们连续存储在内存中。Java继承了这个含义。它与列表或向量不同,因为数组比数组或数组更基本。

一个向量是定义为可被添加到另一个相同类型的对象,或者通过产生在相同类型的另一向量的任何真实(或复合物)数相乘的对象的数学构造。它还具有其他一些非常有用的属性。

向量具有。这是必须组合才能获得该类型的每个可能向量的最小向量的最小数量。速度和加速度是3维向量,因为空间具有3个基本方向,通过将这3个基本方向相乘,您可以获得空间中的任何位置。平面中的位置是2维向量,而单个数字是1维向量。

表示维数n向量的一种方法是使用n个元素组成数组,每个元素代表要添加到向量中必须添加的每个基本向量的数量。

由于您可以使用多种元素表示向量,因此随着时间的流逝,这两个概念被等同起来。因此,在许多地方,它们只是同一件事,在某些语言中,数组称为向量。

一个单词具有两种不同含义的另一种情况是例如维度。Wikipedia将向量定义为一维数组的例子。您在这里没有谈论矢量维。您正在谈论数据结构的计算机表示。3维向量可以由大小为3的3维“ 1维”数组表示。3x3矩阵可以由“二维”数组表示,程序员将其称为数组数组。3x3矩阵也是9维的数学矢量(因为它具有矢量的所有属性)并且具有9个数字。令人困惑,是吗?

无论如何,我认为答案很简单:不用担心。这完全取决于上下文。这两个词有不同的起源,但是在数据结构的上下文中,当它们说向量时,它们的意思恰好是array


我不认为这是真的。在我遍历的几乎所有文档中,Array都表示固定大小,Vector表示结构可以(但不一定是)动态调整大小。在编程的上下文中,术语的数学定义令人难以置信。
Chuu 2014年

-1

上面的答案描述了为什么该类与“数组”不同的原因-我怀疑使用不同名称的原因是因为程序员通过拥有井井有条的名称空间而得到了帮助-换句话说,如果您谈论的是“向量”准确地弄清您的意思是什么类,而如果所有相似的类仅是数组,那么就不是很清楚。



-1

这只是草率的编辑。

Java的早期版本不包括ArrayList。代替了ArrayList,使用了Vector。ArrayList是后来添加的,在大多数情况下现在代替Vector使用。我希望这本书是在添加ArrayList之前写的,并且当文本更新时,对vector的引用没有。

我建议您避免使用这种“在十分钟之内全部学习”的书。通常,它们写得很快而草率。这些知识不会使您在一家严肃的商店工作。

取而代之的是寻找涵盖技术的公认用户阅读并阅读的书,以便理解。


1
“早期版本...有”吗?那是java.util.Vector什么?
恢复莫妮卡-M.Schröder13年

1
java.util.Vector是不推荐使用的。:-)
Brian Knoblauch

-1

向量一词来自工程/物理。向量代表具有方向的2维和3维线。例如,假设射弹的水平速度为20 m / s,垂直速度为10 m / s。因此,您将其表示为(20,10)。它以某种对角线的形式飞行,所以现在看看数学上速度矢量如何成为数组(也称为矢量)。


-2

我们不会调用数组向量,要么您误解了源代码,要么就误解了源Java,或者两者都没有。
数组与Vector的数据结构完全不同,Vector又与List不同(您的粘贴代码使用的是List)。

当然,数学向量可以在Java中使用这三种机制中的任何一种来实现,而在幕后,向量和列表中的任一个或两者都可以使用数组来实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.