Java String array: ¿hay algún tamaño de método?

152

Vengo de un fondo php y en php, hay una array_size()función que te dice cuántos elementos en la matriz se usan.

¿Hay un método similar para una String[]matriz? Gracias.

phill
fuente
3
Je, todas las respuestas fueron en el mismo minuto.
jjnguy
1
Ah, PHP con su espacio de nombres global desordenado. Los buenos viejos tiempos ...
kevinji
2
Creo que quiere decir php's count () not array_size ()
Joshua Burns

Respuestas:

277

Sí, .length(como propiedad, no es un método):

String[] array = new String[10];
int size = array.length;
Kris
fuente
2
hola, ¿cómo podríamos encontrar los documentos que enumeran todas las propiedades y funciones posibles del objeto de matriz? No me refiero al objeto Arrays, que es el único documento que puedo encontrar.
GMsoF
1
@GMsoF La documentación para "[]" (matriz, no objeto Arrays) es en realidad la especificación Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Editar: Ah ... el comentario es de 2013 ...
Acapulco
44
array.length

En realidad es un miembro final de la matriz, no un método.

jjnguy
fuente
2
IIRC, en realidad no es un campo, solo parece uno.
Tom Hawtin: entrada
Oh, entonces que es? ¿Alguna cosa especial de Array?
jjnguy
3
un "pseudo campo" que se compila en un código operativo de longitud de matriz especial, en lugar del código operativo de acceso de campo.
Pete Kirkham
2
Es un campo, de acuerdo con §10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "La longitud del campo público final, que contiene el número de componentes de la matriz ( la longitud puede ser positiva o cero) ".
Michael Myers
19

Además, probablemente sea útil tener en cuenta que si tiene una matriz de múltiples dimensiones, puede obtener la dimensión respectiva simplemente agregando un '[0]' a la matriz que está consultando hasta llegar al eje / tupla / dimensión apropiado.

Esto probablemente se explica mejor con el siguiente código:

public class Test {
    public static void main(String[] args){
        String[][] moo = new String[5][12];

        System.out.println(moo.length); //Prints the size of the First Dimension in the array
        System.out.println(moo[0].length);//Prints the size of the Second Dimension in the array
    }

}

Que produce la salida:

5
12
Liang
fuente
15

propiedad final de array.length

Es de propiedad pública y definitiva. Es final porque las matrices en Java son inmutables por tamaño (pero mutables por el valor del elemento)

dfa
fuente
14

Las matrices son objetos y tienen un campo de longitud.

Cadena [] haha ​​= {"olle", "bulle"};

jaja.length sería 2

willcodejavaforfood
fuente
Solo para tontear. Pero creo que las matrices NO son objetos en Java, son uno de los dos tipos de variables de referencia. El otro ser objetos.
jabbie
2
@jabbie: ¿En serio? Tienes una referencia para eso? Solo lo cuestiono porque puedes decir Object o = new String [] {"hello"};
Simon Nickerson
Simon Creo que la razón por la que funciona la declaración es porque introdujeron las clases reflexivas para todos los tipos primitivos.
Brian Sweeney
9
Lea la primera oración de docs.oracle.com/javase/specs/jls/se8/html/jls-10.html y luego intente decirnos que las matrices no son objetos. ;)
Michael Myers
1
podrías haber usado algún otro nombre de variable, me distrae mucho
Space Rocker
11

En java hay un lengthcampo que puede usar en cualquier matriz para averiguar su tamaño:

    String[] s = new String[10];
    System.out.println(s.length);
bruno conde
fuente
1
gracias por no entrar en tecnicismos sobre lo que podría o no ser, y simplemente proporcionar una respuesta breve y concisa. +1 para ti :)
Joshua Burns
9

Si quieres una función para hacer esto

Object array = new String[10];
int size = Array.getlength(array);

Esto puede ser útil si no sabe qué tipo de matriz tiene, por ejemplo, int [], byte [] u Object [].

Peter Lawrey
fuente
6

Hay una diferencia entre la longitud Stringy arraypara aclarar:

int a[] = {1, 2, 3, 4};
String s = "1234";

a.length //gives the length of the array

s.length() //gives the length of the string
Valona
fuente
Esto debe actualizarse en la pregunta si es una aclaración.
Whitecat
5

La respuesta es "Todos ellos". Una matriz de Java se asigna con un número fijo de ranuras de elementos. El atributo "length" te dirá cuántos. Ese número es inmutable para la vida de la matriz. Para un equivalente redimensionable, necesita una de las clases java.util.List, donde puede usar el método size () para averiguar cuántos elementos están en uso.

Sin embargo, hay "En uso" y luego está En uso . En una matriz de objetos de clase, puede tener ranuras de elementos cuyos elementos son objetos nulos, por lo que, aunque cuentan en el atributo de longitud, pero las definiciones de la mayoría de las personas, no están en uso (YMMV, dependiendo de la aplicación). No hay una función integrada para devolver los recuentos nulos / no nulos.

Los objetos de lista tienen otra definición más de "En uso". Para evitar la creación / destrucción excesiva de las estructuras de almacenamiento subyacentes, generalmente hay algo de relleno en estas clases. Se usa internamente, pero no se cuenta en el método size () devuelto. Y si intenta acceder a esos elementos sin expandir la Lista (a través de los métodos de agregar), obtendrá una excepción de índice ilegal.

Por lo tanto, para Listas, puede tener "En uso" para elementos comprometidos no nulos, Todos los elementos comprometidos (incluidos los elementos nulos) o Todos los elementos, incluido el espacio de expansión actualmente asignado.

Tim H
fuente
2

Todas las respuestas anteriores son correctas. Lo importante a observar es que las matrices tienen un atributo de longitud pero no un método de longitud. Siempre que use cadenas y matrices en Java, los tres modelos básicos que podría enfrentar son:

  1. Cadena s = nueva Cadena ("vidyasagar");
    System.out.println (s.length ()); // En este caso estamos usando solo String. Sin atributo de longitud para cadenas. tenemos que usar el método length ().
  2. int [] s = nuevo int [10]; System.out.println (s.length); // aquí usamos el atributo de longitud de las matrices.
  3. Cadena [] s = nueva Cadena [10];
    System.out.println (s.length); // Aquí, aunque el tipo de datos es String, no es una sola String. s es una referencia para la matriz de cadenas. Entonces, utilizamos el atributo de longitud de las matrices para expresar cuántas cadenas pueden caber en esa matriz.
vidyasagar
fuente
1

Realmente no es la respuesta a su pregunta, pero si desea tener algo como una matriz que puede crecer y reducirse, no debe usar una matriz en Java. Probablemente sea mejor usando ArrayList u otra implementación de List.

Luego puede llamar a size () para obtener su tamaño.

Simon Groenewolt
fuente