Java-配列を「ベクター」と呼ぶのはなぜですか?


20

Javaプログラミングに関する本を読んでいます。「ベクトル」という言葉の定義を理解していることを確認したいと思います。ウィキペディアによると、ベクターは「1次元配列」であり、ソースはhttp://en.wikipedia.org/wiki/Vectorです。

配列を単に配列と呼ぶ方が簡単ではないでしょうか?「ベクター」などの派手な言語を使用する必要がある理由はありますか?配列とベクトルに違いはありますか?


ここに画像の説明を入力してください

出典:Cracking the Coding Interview、4th Edition、by Gayle McDowell、page 47。

FAQ
Q-english.stackexchange.comに投稿しなかったのはなぜですか?
A-コンピュータサイエンス指向の人だけが良い答えを得ると思うからです。


1
ベクトルはArrayListsと同じではありません。つまり、組み込みの同期のためです。詳細:stackoverflow.com/questions/2986296/...
イェルーンVannevel

トピック外:「ベクトル」という用語は、Javaで使用されるだけではありません。1. C ++ライブラリにはstd::vector<…>(動的サイズの「配列」)があります。2. CLR(.NETランタイム)は、「配列」と「ベクトル」も区別します。後者は前者の特殊なケース、つまり1次元のゼロベースのケースです)。ベクトルの特別な最適化があるため、この区別は重要です。3.数学では、実数のnタプルは「ベクトル」とも呼ばれます。
stakx

1
@JeroenVannevel Vectorクラスと、一次元配列と見なすことができるvectorの概念との間で混乱が生じたと思います。
C.Champagne

OT、コンピューターサイエンスの人々からの回答が必要な場合、cs.stackexchangeではなくここに投稿してください。そして、なぜjavaフラグなのですか?プログラミングクラスで覚えていることから、配列があり、リンクリストがあります。配列を除き、コンテナ(ベクター、リスト、マップ、ヒープなど)はリンクリストとして実装されます。
imel96

2
ベクトルを配列と呼ぶのはなぜですか?
m3th0dman

回答:


35

通常の使用法では、「配列」は、1次元配列または多次元配列のいずれかを意味します。また、数学では、行列は2次元配列であり、ベクトルは1次元配列です。


8
トピック外:数学では、「スカラー」は0次元配列ですか?
stakx

6
@stakx:はい、そうです。通常、スカラーは単なるスカラーであり、実際に「0次元配列」と呼ぶ人はいません。しかし、アイデアは正しいです。
グレッグヒューギル

2
それらはすべてテンソルであると言う方が正確です。Wolfram Mathworldより:「テンソルは、任意の数のインデックスに対するスカラー(インデックスがない)、ベクトル(インデックスが1つだけ)、およびマトリックス(インデックスが2つだけ)の一般化です。(ローランド、トッドとWeisstein、エリック・W. "テンソル。" MathWorldから- AヴォルフラムのWebリソース。mathworld.wolfram.com/Tensor.html
SOFE

価値があるのは、数学ではベクトルは1次元配列ではありません。ベクトルは、ベクトル空間の要素、つまり要素を追加し、スカラーを乗算できるセットです。
mlainz

最も有名なベクトル空間は、要素ごとの加算と乗算を伴う数値の「配列」のセットであるR ^ nです。実際の関数のセットもベクトル空間ですが、通常、人々は関数を配列とは考えません。加算と乗算の明らかな選択がないため、文字の配列はベクトル空間ではありません。数学の専門用語では、配列はタプルまたは有限シーケンスです。ベクトルではないタプルの例については、en.wikipedia.org / wiki / Vector_(mathematics_and_physics)を参照してください。
mlainz

10

ベクトルは正確な配列ではありません。とにかく古典的なものではありません。それらは動的配列です。固定サイズではなく、必要に応じてサイズを変更できます。したがって、これらはArrayListsに似ていますが、まったく同じではありません。

ArrayListsはVectorとは異なり、Vectorsは個々の操作を同期します。これは、特にJon Skeetごとに並行性を目的としないものです。したがって、VectorはArrayListを支持して廃止されましたが、一部の人はそれをベクターと呼んでいます。

この名前は元々、1次元マトリックスの数学用語から派生しています。これは、実際には構造体がnタプルであるにもかかわらずです。


2
Vectorクラスとvectorの概念を混同したと思いますが、これは単次元配列と見なすことができ、Javaの特定のノートです。
C.シャンパン

@ C.Champagne彼はJavaの例を使用したので、それが彼に与えたものです。数学的な構造の定義を追加しましたが、これは技術的には「ベクター」でもありません。
世界エンジニア

2
@ C.Champagneと一緒です。ベクトル(クラス)を意味する場合、テキストはキャップVを使用していました。ベクトルの古典的な(クラスではなく)定義を示す小文字のvを使用していました。
リグ

数学ではベクトルはベクトルと呼ばれます。「技術的には「ベクター」でもない」とはどういう意味ですか?
アンドレスF.

@AndresF。配列や「ベクトル」のような一連の数値は、nタプルになります。これは、値の離散的なコレクションであるためです。
ワールドエンジニア

4

通常、ベクトル配列は同じものであり、プログラミング時に交換可能に使用されます。それはほとんどの場所にあるので、ほとんどの場合それについてあまり心配するべきではありません。

とはいえ、言語は不正確であり、同じコンテキストを意味する異なるコンテキストで異なる意味を持つ単語や、2つ以上の異なる意味を持つ1つの単語が存在する場合があります。

Cでは、配列はメモリに連続して格納される同じタイプの一連のデータ要素です。Javaはその意味を継承しました。配列はそれらよりも基本的であるため、ListやVectorとは異なります。

ベクターは、同じタイプの別のオブジェクトに追加することができ、または同じタイプの別のベクトルを生じる任意の実数(または複素数)数を乗算するオブジェクトとして定義数学的構築物です。また、非常に便利な他のプロパティもいくつかあります。

ベクトルには次元があります。それは、そのタイプのすべての可能なベクトルを取得するために結合する必要がある異なるベクトルの最小数です。空間には3つの基本方向があり、これらの3つの基本方向の倍数を追加することで、空間内の任意の位置を取得できるため、速度と加速度は3次元ベクトルです。平面内の位置は2次元のベクトルであり、個々の数値は1次元のベクトルです。

次元nのベクトルを表す1つの方法は、n要素の配列を使用することです。各要素は、ベクトルに到達するために追加する必要のある各基本ベクトルの量を表します。

時間の経過とともに、要素の配列を使用してベクトルを表現できるため、2つの概念は同一視されました。したがって、多くの場所で、それらは単に同じものであり、一部の言語では配列はベクトルと呼ばれます。

1つの単語が2つの異なる意味を持つ別のケースは、たとえば、dimensionです。1次元配列としてのベクトルのウィキペディア定義は一例です。ここでは、ベクトルの次元については説明していません。あなたは、データ構造のコンピューター表現について話しています。3次元ベクトルは、サイズ3の「1次元」配列で表すことができます。3行の数字。3x3マトリックスは、プログラマーが配列の配列と呼んでいる「2次元」配列で表すことができます。しかし、3x3行列は、次元9の数学ベクトルでもあり(ベクトルのすべてのプロパティを持っているため)、9つの数値を持ちます。混乱しますか?

とにかく、答えは単純だと思う:心配しないで。それはすべてコンテキストに依存します。2つの単語は起源が異なりますが、データ構造のコンテキストでは、ベクトルと言う場合、正確にarrayを意味します。


私はこれが真実だとは思わない。私がArrayで実行したほとんどすべてのドキュメントでは、サイズは固定サイズを意味し、Vectorは構造が動的にサイズ変更できることを意味しています(必ずしもそうである必要はありません)。用語の数学的な定義は、プログラミングの文脈では信じられないほど誤解を招きます。
チュウ

-1

上記の答えは、このクラスが「配列」と異なる理由を説明しています-異なる名前が使用される理由は、プログラマーがよく整理された名前空間を持つことによって助けられているためだと思います-つまり、「ベクター」意味するクラスを正確に明確にしますが、同様のクラスがすべて単なる配列である場合、完全に明確ではありません。


-1

「ベクター」という用語は、C ++のstd :: vectorに由来すると思います。JavaとC#の前に登場しました。


3
(強く)意見を裏付けるために外部参照を追加することを検討してください。

-1

それはただずさんな編集です。

Javaの初期バージョンにはArrayListが含まれていませんでした。ArrayListの代わりに、Vectorが使用されました。ArrayListは後で追加され、ほとんどの目的でベクターの代わりに使用されるようになりました。ArrayListが追加される前に本が書かれ、テキストが更新されたとき、ベクターへのこの参照は書かれていなかったと思います。

この種の「10分間ですべて学ぶ」という本を避けることをお勧めします。一般的に、それらは迅速かつだらしないように書かれています。このレベルの知識では、真面目なお店で仕事をすることはできません。

代わりに、対象技術の認知されたユーザーがよくレビューした本を探し、理解のために読んでください。


1
「初期バージョン...が持っていた」?そして何java.util.Vectorですか?
モニカの復活-M.シュレーダー

1
推奨されないのはjava.util.Vectorです。:-)
ブライアンノブラウチ

-1

ベクトルという用語は、工学/物理学に由来します。ベクトルは、方向を持つ2次元および3次元の線を表します。たとえば、発射体の水平速度が20 m / s、垂直速度が10 m / sであるとします。したがって、これを(20,10)として表すことになります。斜め右に飛んでいるので、数学的に速度ベクトルがどのように配列、つまりベクトルになるかを見てみましょう。


-2

ソースを誤解したか、Javaを誤解したかのいずれか、またはその両方を、配列ベクトルとは呼びません。
配列はベクターとはまったく異なるデータ構造であり、ベクターはリスト(貼り付けたコードが使用する)とは異なります。

もちろん、3つのメカニズムのいずれかを使用してJavaで数学ベクトルを実装できます。また、内部では配列を使用してベクターとリストのいずれかまたは両方を実装できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.