2010-02-04 13 views
9

Duplicar posible:
count vs length vs size in a collection¿Existe una diferencia técnica entre los términos "longitud" y "tamaño" (en programación, por supuesto)?

En Java, en particular, en Strings, te llama string.length(), mientras que en Lists se llama list.size(). ¿Hay una diferencia técnica entre los dos términos, ya que String es realmente solo una lista de chars?

Cualquier comentario apreciado.

+1

Quizás la diferencia es que 'length' se usa con secuencias (es decir, algo contiguo). Y el "tamaño" más general se usa con los conjuntos (solo una colección de elementos)? –

+0

Discusión similar en http://stackoverflow.com/questions/300522/count-vs-length-vs-size-in-a-collection –

Respuesta

9

Idealmente, count sería el número de elementos, y size sería la cantidad de almacenamiento ocupada (como en sizeof).

En la práctica, los tres (incluido length, que es el más ambiguo) se confunden en muchas bibliotecas ampliamente utilizadas, por lo que no tiene sentido tratar de imponer un patrón en esta etapa.

+2

+1 por admitir que los programadores no son perfectos. –

+2

A veces 'size' se usa para el número de elementos, y' capacity' es para la cantidad de almacenamiento utilizada. –

+0

@litb, con respecto a C++, ¿no es posible que 'vector :: capacity' pueda devolver un valor distinto de cero aunque todavía no se haya asignado almacenamiento? Sería un comportamiento indefinido intentar usar el almacenamiento antes de que ocurra un "cambio de tamaño" adecuado. Entonces, una implementación podría retrasar la asignación real hasta entonces, y luego también podría asignar más de lo que pedimos. Entonces, la 'capacidad' es más como una sugerencia para la implementación que una declaración real de uso de almacenamiento. Sin duda, tal implementación rompería bastantes programas existentes, aquellos que hacen una 'v.reserve (200)' y luego siguen directamente con '& v [100]'. –

3

No lo creo. Es más probable que se deba a que la API está trabajando en un equipo grande y diferentes personas tienen una opinión diferente sobre cuál debería ser el nombre, especialmente con palabras que sinónen en cierto contexto, como el tamaño y la longitud en este asunto.

13

En general, length() se utiliza cuando algo tiene una longitud constante, mientras que size() se usa en algo con una longitud variable. Después de eso, no conozco ninguna buena razón para usar dos términos casi sinónimos.

+1

Asumiendo esto, length() es para *** tipos de datos *** inmutables como * String * y size() son para *** tipos de datos *** mutables como * List *. – Alex

2

Como han mencionado otros, creo que es una diferencia semántica. Las matrices están definidas muy claramente y se las conoce como longitudes. Una colección de objetos es más difusa, en parte porque su implementación (¿es una matriz, lista enlazada, árbol?) No es necesariamente su preocupación. Un árbol realmente no tiene una longitud, pero tiene un tamaño definido, por lo que el tamaño puede tener más sentido semánticamente.

+0

No usar 'size' para matrices tiene sentido ya que las matrices tienen un tamaño pero no es la cantidad de elementos. Una matriz 'int [5]' tiene una longitud de 5 y un tamaño de 20 (5 elementos y cada uno tiene 4 bytes, hace 20 bytes).Pero esto choca con el ejemplo de tu árbol, como si el tamaño del árbol fuera el número de elementos en el árbol, entonces, ¿cómo nombrarías el tamaño real que hay en la memoria? Por lo tanto, tampoco usaría el tamaño para los árboles, sino 'count' o' numberOfNodes'. Evito 'length' en general, a menos que hablemos de cosas que tienen una longitud por definición, p. una Cadena tiene una longitud (¡y un tamaño!) pero no debería tener un 'conteo '. – Mecki

3

Para mí,

"longitud" implica un pedido, que está midiendo una longitud desde el principio hasta el final.

"tamaño" implica qué tan grande es algo sin implicar un orden, inicio o fin.

0

Para mí, "tamaño" se usa cuando se describe una estructura u otra forma de organizar bytes en una computadora. No necesariamente tiene que ser instanciado. "longitud", por otro lado, implica qué tan grande es un determinado búfer de bytes en la memoria en un punto determinado.

E.g. ¿Cuál es la longitud del buffer que estás proporcionando? Es la misma cantidad de bytes que el tamaño de la estructura x.

Cuestiones relacionadas