2012-03-04 12 views
5

Solo una domanda semplice, ma perché length in un array non incapsulato? È solo per i principianti in programmazione perché ritengo che un metodo getLength() sia facile da implementare.Lunghezza negli array

+0

correlati: http://stackoverflow.com/q/9297899/697449 –

+1

Vota per riaprire. IMO, questo NON è un duplicato della domanda collegata. Questa domanda spiega perché i designer Java non hanno ** incapsulato ** il campo 'length'. (La domanda collegata riguarda la coerenza delle API degli array rispetto alle stringhe ... il che è un problema significativamente diverso.) –

+2

Inoltre, è (IMO) e ** interessante ** domanda, e degno di rispondere. –

risposta

1

Ho un'ipotesi ma non posso dire che questo sia il motivo per cui i progettisti di java lo hanno fatto in quel modo.

Una matrice è un contenitore (e un oggetto ovviamente) con una lunghezza fissa. Ed è molto semplice, quindi l'incapsulamento in questo caso sarebbe bello ma non critico. Date un'occhiata ad ArrayList per esempio, che può essere considerato come un incapsulamento di un array.

Un array di base ha molti vantaggi rispetto ad altri tipi che lo incapsulano. E così forse quando è uscita la prima versione di Java, mancava la maggior parte dell'ottimizzazione che ha oggi. Quindi avere una struttura dati con la semplicità (in termini di prestazioni) di un array è una buona cosa.

Inoltre potrebbe essere semplice come che non ha ancora pensare che in quel momento e poi hanno dovuto mantenere una compatibilità all'indietro :)

In ogni caso, se si trova roba interessante che (forse si potrebbe email sole/oracolo) per favore posta! Questa è una bella domanda.

0

Sebbene gli array possano essere interpretati come oggetti, sono in realtà solo un insieme fisso di indirizzi di memoria contenenti qualche altro oggetto o variabile. In questo modo, hanno gli attributi, come ad esempio .length, ma non necessariamente metodi, come .getLength()

Un sacco di informazioni su array possono essere trovate qui: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html

+1

'[citazione necessaria]' – delnan

+1

Questa spiegazione non regge. In effetti, gli array hanno 'Object' come loro superclasse implicita, e quindi hanno un sacco di metodi. Ne consegue che i designer Java * potevano * aver definito un metodo 'length()' per tutti gli array. (Il fatto che un programma applicativo non possa aggiungere metodi non è rilevante qui.) –

0

Quello sarebbe facile da implementare, ed è per questo non è implementato.

Gli array sono semplicemente blocchi di archiviazione, senza controlli reali. Consentono un metodo di archiviazione facile e veloce per quando non sono richiesti controlli avanzati.

È possibile utilizzare elementi quali elenchi, code, elenchi concatenati, doppi elenchi collegati ecc. Che possono conservare un record delle loro dimensioni, se necessario. Ovviamente, a seconda della lingua che stai utilizzando, potresti doverli creare tu stesso.

Se si desidera avere una lunghezza di array e utilizzare ancora un array semplice, è possibile aggiungere 1 a una variabile di conteggio ogni volta che si aggiunge qualcosa e meno uno ogni volta che si rimuove qualcosa. Questo eseguirà la stessa funzione di un metodo getLength().

+3

Cosa? La lunghezza * è * memorizzata, semplicemente non viene esposta attraverso un metodo getter ma attraverso un membro pubblico. – delnan

Problemi correlati