2010-02-04 9 views
9

Mögliche Duplizieren:
count vs length vs size in a collectionGibt es einen technischen Unterschied zwischen den Begriffen "Länge" und "Größe" (natürlich bei der Programmierung)?

In Java insbesondere auf Strings, rufen Sie string.length(), während in Lists Sie list.size() nennen. Gibt es einen technischen Unterschied zwischen den beiden Begriffen, da ein String wirklich nur eine Liste von chars ist?

Alle Kommentare geschätzt.

+1

Vielleicht ist der Unterschied, dass "Länge" mit Sequenzen (d. H. Etwas zusammenhängendes) verwendet wird. Und die allgemeinere "Größe" wird mit Sets (nur eine Sammlung von Elementen) verwendet? –

+0

Ähnliche Diskussion in http://stackoverflow.com/questions/300522/count-vs-längen-vs-size-in-a-collection –

Antwort

9

Idealerweise wäre count die Anzahl der Elemente, und size wäre die Menge des Speichers belegt (wie in sizeof).

In der Praxis alle drei (einschließlich length, die die meisten nicht eindeutig ist) sind in vielen weit verbreiteten Bibliotheken verworren, also gibt es keinen Grund auf sie ein Muster in diesem Stadium zu verhängen versucht.

+2

+1 für die Zulassung, dass Programmierer nicht perfekt sind. –

+2

Manchmal wird 'Größe' für die Anzahl der Artikel verwendet, und 'Kapazität' ist für die Menge des belegten Speicherplatzes. –

+0

@litb, in Bezug auf C++, ist es nicht möglich, dass "Vektor :: capacity" einen Wert ungleich Null zurückgeben könnte, obwohl noch kein Speicher zugewiesen wurde? Es wäre ein undefiniertes Verhalten, den Speicher zu verwenden, bevor eine richtige "Größenänderung" stattfindet. Eine Implementierung könnte daher die tatsächliche Zuteilung bis dahin verzögern - und dann könnte sie auch mehr zuweisen, als wir verlangt haben. Die "Kapazität" ist also eher ein Hinweis auf die Implementierung als eine tatsächliche Aussage zur Speicherbelegung. Zweifellos würde eine solche Implementation einige existierende Programme durchbrechen, diejenigen, die 'v.reserve (200)' machen und dann direkt nach '& v [100]' gehen. –

3

Ich glaube nicht. Es wird eher dadurch verursacht, dass die API in einem großen Team arbeitet und verschiedene Leute unterschiedliche Ansichten davon haben, was der Name sein soll, insbesondere bei Wörtern, die in bestimmten Kontexten synonym sind, wie Größe und Länge in dieser Angelegenheit.

13

Im Allgemeinen wird length() verwendet, wenn etwas eine konstante Länge hat, während size() für etwas mit variabler Länge verwendet wird. Darüber hinaus kenne ich keinen guten Grund, zwei fast synonyme Begriffe zu verwenden.

+1

Angenommen, länge() ist für *** unveränderliche *** Datentypen wie * String * und size() sind für *** veränderbare *** Datentypen wie * List *. – Alex

2

Wie andere angesprochen haben, denke ich, es ist ein semantischer Unterschied. Arrays sind sehr klar definiert und werden als Länge bezeichnet. Eine Sammlung von Objekten ist unscharfer, teilweise weil ihre Implementierung (ist es ein Array, eine Linked-List, ein Tree?) Nicht unbedingt Ihr Anliegen ist. Ein Baum hat nicht wirklich eine Länge, aber er hat eine bestimmte Größe, daher kann Größe semantisch sinnvoller sein.

+0

Die Verwendung von 'size' für Arrays ist sinnvoll, da Arrays eine Größe haben, aber nicht die Anzahl der Elemente. Ein 'int [5]' -Array hat eine Länge von 5 und eine Größe von 20 (5 Elemente und jeweils 4 Bytes, machen 20 Bytes).Aber das kollidiert mit Ihrem Baumbeispiel, als ob die Baumgröße die Anzahl der Elemente im Baum ist. Wie würden Sie dann die tatsächliche Größe im Speicher benennen? Daher würde ich auch keine Größe für Bäume verwenden, sondern "count" oder "numberOfNodes". Ich vermeide im Allgemeinen "Länge", es sei denn, wir sprechen von Dingen, die definitionsgemäß eine Länge haben, z. Ein String hat eine Länge (und eine Größe!), sollte aber keinen "count" haben. – Mecki

3

Für mich

„Länge“ bedeutet eine Bestellung aufgeben, Sie werden am Ende mit einer Länge von Anfang an zu messen.

"Größe" bedeutet, wie groß etwas ist, ohne eine Reihenfolge, einen Anfang oder ein Ende anzugeben.

0

Für mich wird "Größe" verwendet, wenn eine Struktur oder eine andere Möglichkeit zum Organisieren von Bytes in einem Computer beschrieben wird. Es muss nicht unbedingt instanziiert werden. "Länge" impliziert andererseits, wie groß ein bestimmter Puffer von Bytes im Speicher an einem gegebenen Punkt ist.

z. Wie lang ist der Puffer, den Sie bereitstellen? Es ist die gleiche Anzahl von Bytes wie die Größe der Struktur x.

Verwandte Themen