Java - Perché chiamiamo un array un "vettore"?


20

Sto leggendo un libro sulla programmazione Java e desidero confermare che comprendo la definizione della parola "vettore". Wikipedia dice che il vettore è "Una matrice unidimensionale", fonte http://en.wikipedia.org/wiki/Vector .

Non sarebbe più semplice chiamare l'array semplicemente un array? C'è qualche motivo per cui abbiamo bisogno di usare un linguaggio di fantasia come "vettore"? C'è una differenza tra un array e un vettore?


inserisci qui la descrizione dell'immagine

Fonte: Cracking the Coding Interview, 4th Edition, di Gayle McDowell, pagina 47.

FAQ
D - Perché non l'hai pubblicato su english.stackexchange.com?
A - Perché penso che solo le persone orientate all'informatica avranno una buona risposta.


1
I vettori non sono gli stessi di ArrayLists, in particolare a causa della sincronizzazione integrata. Maggiori informazioni qui: stackoverflow.com/questions/2986296/...
Jeroen Vannevel

Fuori tema: il termine "vettore" non viene utilizzato solo in Java. 1. La libreria C ++ ha std::vector<…>("array" di dimensioni dinamiche). 2. Il CLR (.NET runtime) distingue anche tra "matrici" e "vettori", quest'ultimo essendo un caso speciale del primo, vale a dire quelli unidimensionali, a base zero. Questa distinzione è importante perché ci sono ottimizzazioni speciali per i vettori. 3. In matematica, una n- coppia di numeri reali viene talvolta chiamata "vettore".
stakx,

1
@JeroenVannevel Penso che tu abbia creato la confusione tra la classe Vector e il concetto di vettore che può essere considerato un array unidimensionale.
C.Champagne il

OT, se vuoi una risposta da persone di informatica, perché pubblicare qui e non su cs.stackexchange? E perché la bandiera java? Da quello che ricordo dalla mia classe di programmazione, c'è l'array e poi c'è la lista collegata. Ad eccezione dell'array, i contenitori (vettore, elenco, mappa, heap, ecc.) Sono implementati come elenco collegato.
imel96,

2
Perché chiamiamo un vettore un array?
m3th0dman,

Risposte:


35

Nell'uso tipico, un "array" può significare un array monodimensionale o un array multidimensionale. Inoltre, in matematica, una matrice è un array bidimensionale mentre un vettore è un array monodimensionale.


8
Fuori tema: in matematica, uno "scalare" è un array a 0 dimensioni?
stakx,

6
@stakx: Sì, esatto. Di solito uno scalare è solo uno scalare, nessuno in realtà lo chiamerebbe un "array 0-dimensionale". Ma l'idea è giusta.
Greg Hewgill,

2
È più preciso affermare che sono tutti tensori. Da Wolfram Mathworld: "I tensori sono generalizzazioni di scalari (che non hanno indici), vettori (che hanno esattamente un indice) e matrici (che hanno esattamente due indici) a un numero arbitrario di indici". (Rowland, Todd e Weisstein, Eric W. "Tensor." Da MathWorld - Una risorsa Web Wolfram. Mathworld.wolfram.com/Tensor.html )
SOFe

Per quello che vale, in matematica un vettore non è un array monodimensionale. Un vettore è un elemento di uno spazio vettoriale, ovvero un insieme in cui gli elementi possono essere aggiunti e moltiplicati per gli scalari.
mlainz,

Lo spazio vettoriale più famoso è R ^ n, l'insieme di "matrici" di numeri con addizioni e moltiplicazioni in termini di elementi. L'insieme di funzioni reali è anche uno spazio vettoriale, ma di solito le persone non pensano alle funzioni come a matrici. Una matrice di personaggi non sarebbe uno spazio vettoriale, poiché non esiste una scelta ovvia di addizione e moltiplicazione. Nel gergo matematico, un array è una tupla o una sequenza finita. Vedi en.wikipedia.org/wiki/Vector_(mathematics_and_physics) per ulteriori esempi di tuple che non sono vettori.
Mlainz,

10

I vettori non sono esattamente array. Non quelli classici comunque. Sono matrici dinamiche. Possono essere ridimensionati secondo necessità anziché avere dimensioni fisse. Sono quindi simili alle ArrayLists ma non sono esattamente le stesse.

Le liste di array differiscono dai vettori in quanto i vettori sincronizzano le singole operazioni, cosa che non si desidera ai fini della concorrenza, in particolare per Jon Skeet . Pertanto Vector è stato deprecato a favore di ArrayList ma alcuni lo chiamano ancora Vector.

Il nome deriva originariamente dal termine matematico per una matrice monodimensionale. Questo nonostante la struttura sia in realtà una n-tupla .


2
Penso che tu abbia creato la confusione tra la classe Vector e il concetto di vettore che può essere considerato come un array unidimensionale e che nota come specifico Java.
C.Champagne il

@ C.Champagne Ha usato un esempio Java quindi è quello che gli ho dato. Ho aggiunto la definizione per il costrutto matematico, che per inciso non è neanche tecnicamente un "vettore".
Ingegnere mondiale il

2
Sono con @ C.Champagne. Se avessero significato Vector (la classe) il testo avrebbe usato un cap V. Hanno usato una v minuscola che indica la definizione classica (non la classe) di un vettore.
Rig

Ehm, i vettori sono chiamati vettori in matematica . Cosa intendi con "non tecnicamente neanche un" vettore "?
Andres F.

@AndresF. Un insieme di numeri come un array o un "Vector" sarebbe una n-tupla per la mia comprensione perché è una raccolta discreta di valori.
Ingegnere mondiale il

4

Generalmente, vector e array sono la stessa cosa e vengono usati in modo intercambiabile durante la programmazione. Questo è nella maggior parte dei luoghi, quindi non dovresti preoccuparti molto per la maggior parte del tempo.

Detto questo, il linguaggio è impreciso e talvolta abbiamo parole che hanno significati diversi in contesti diversi che finiscono per significare la stessa cosa, o una parola che ha due o più significati diversi.

In C an array è una serie di elementi di dati dello stesso tipo che sono memorizzati nella memoria contigua. Java ha ereditato quel significato. Non è lo stesso di un elenco o di un vettore, poiché gli array sono più basilari di quelli.

UN vettore è un costrutto matematico definito come un oggetto che può essere aggiunto a un altro oggetto dello stesso tipo o può essere moltiplicato per qualsiasi numero reale (o complesso) risultante in un altro vettore dello stesso tipo. Ha anche alcune altre proprietà che sono molto utili.

Un vettore ha dimensione . È il numero minimo di diversi vettori che devono essere combinati per ottenere ogni possibile vettore di quel tipo. La velocità e l'accelerazione sono vettori tridimensionali perché lo spazio ha 3 direzioni base e aggiungendo multipli di quelle tre direzioni base è possibile ottenere qualsiasi posizione nello spazio. La posizione in un piano è un vettore bidimensionale e i singoli numeri sono vettori monodimensionali.

Un modo per rappresentare un vettore di dimensione n è utilizzare un matrice di n elementi ciascuno che rappresenta la quantità di ciascun vettore di base che è necessario aggiungere per raggiungere il vettore.

Dato che puoi rappresentare un vettore usando una matrice di elementi, con il tempo i due concetti sono stati equiparati. Quindi, in molti luoghi, sono semplicemente la stessa cosa e in alcune lingue le matrici sono chiamate vettori.

Un altro caso in cui una parola ha due significati diversi è, ad esempio, dimensione . La definizione di Wikipedia di un vettore come array monodimensionale è un esempio. Non stai parlando di dimensione vettoriale qui. Stai parlando della rappresentazione al computer della struttura dei dati. Un vettore tridimensionale può essere rappresentato da una matrice "1-dimensionale" di dimensioni 3. 3 numeri in linea. Una matrice 3x3 può essere rappresentata da un array "2-dimensionale", che è ciò che i programmatori chiamano un array di array. Tuttavia una matrice 3x3 è anche un vettore matematico della dimensione 9 (poiché ha tutte le proprietà di un vettore) e ha 9 numeri. Confuso, eh?

Comunque, penso che la risposta sia semplicemente: non preoccuparti. Tutto dipende dal contesto. Le due parole hanno origini diverse, ma nel contesto delle strutture dati, quando dicono vettore significano esattamente matrice .


Non penso sia vero. In quasi tutta la documentazione che ho incontrato su Array implica dimensioni fisse, Vector implica che la struttura può essere (ma non necessariamente è) dimensionata dinamicamente. Le definizioni matematiche dei termini sono incredibilmente fuorvianti nel contesto della programmazione.
Chuu,

-1

Le risposte sopra descrivono perché questa classe è diversa da una "matrice" - e sospetto che la ragione per cui venga usato un nome diverso sia perché i programmatori sono aiutati da uno spazio dei nomi ben organizzato - in altre parole se parli di un "vettore" è chiarisci esattamente quale classe intendi, mentre se tutte le classi simili fossero semplicemente array, non sarebbe del tutto chiaro.


-1

Penso che il termine "vettore" derivi dallo std :: vector di C ++. È apparso prima di Java e C #.


3
Si prega (fortemente) di aggiungere un riferimento esterno per sostenere la propria opinione.

-1

È solo un editing sciatto.

Le prime versioni di Java non includevano ArrayList. Invece di ArrayList, è stato utilizzato Vector. ArrayList è stato aggiunto in un secondo momento e ora viene utilizzato al posto di Vector per la maggior parte degli scopi. Mi aspetto che il libro sia stato scritto prima dell'aggiunta di ArrayList e che quando il testo è stato aggiornato, questo riferimento al vettore non lo fosse.

Ti suggerisco di evitare questo tipo di libro "impara tutto in dieci minuti". Generalmente sono scritti in modo rapido e sciatto. Questo livello di conoscenza non ti procurerà un lavoro in un negozio serio.

Cerca invece libri ben recensiti da utenti riconosciuti della tecnologia coperta e leggi per capire.


1
"Le prime versioni ... avevano"? E cos'è java.util.Vector?
Ripristina Monica - M. Schröder l'

1
È obsoleto ciò che è java.util.Vector. :-)
Brian Knoblauch,

-1

Il termine vettore deriva dall'ingegneria / fisica. I vettori rappresentano linee 2 e 3 dimensionali che hanno una direzione. Ad esempio, supponiamo che un proiettile abbia una velocità orizzontale di 20 m / se una velocità verticale di 10 m / s. Quindi lo rappresenteresti come (20,10). Sta volando in una specie di diagonale a destra, quindi ora vedi come matematicamente i vettori di velocità diventano array chiamati vettori.


-2

Non chiamiamo array di vettori, o hai frainteso la tua fonte o la fonte ha frainteso Java, o entrambi.
Un array è una struttura di dati piuttosto diversa da un vettore, che è di nuovo diverso da un elenco (utilizzato dal codice incollato).

Naturalmente un vettore matematico potrebbe essere implementato in Java usando uno dei tre meccanismi e sotto il cofano o sia il vettore che l'elenco potrebbero essere implementati usando array.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.