Matriz Java String: existe um tamanho de método?

152

Eu venho de um plano de fundo php e, em php, existe uma array_size()função que diz quantos elementos na matriz são usados.

Existe um método semelhante para uma String[]matriz? Obrigado.

phill
fonte
3
Heh, todas as respostas estavam no mesmo minuto.
jjnguy
1
Ah, PHP com seu espaço de nomes global desordenado. Os bons velhos tempos ...
kevinji
2
eu acho que ele significa contagem de php () não ARRAY_SIZE ()
Joshua Burns,

Respostas:

277

Sim, .length(semelhante a uma propriedade, não um método):

String[] array = new String[10];
int size = array.length;
Kris
fonte
2
oi, como podemos encontrar os documentos que listam todas as propriedades e funções possíveis do objeto array? Não quero dizer o objeto Arrays, que é o único documento que posso encontrar.
GMsoF 28/03
1
@GMsoF A documentação para "[]" (array, não o objeto Arrays) é na verdade a especificação Java. .eg docs.oracle.com/javase/specs/jls/se7/html/jls-10.html Edit: Ah ... o comentário é de 2013 ...
Acapulco
44
array.length

Na verdade, é um membro final da matriz, não um método.

jjnguy
fonte
2
IIRC, na verdade não é um campo, apenas se parece com um.
Tom Hawtin - tackline
Oh, então o que é isso? Alguma coisa especial sobre Array?
Jjnguy 28/05/09
3
um "pseudo campo" que é compilado para um código op de comprimento de matriz especial, em vez do código op de acesso ao campo.
Pete Kirkham
2
É um campo com codificação para § 10.7 ( java.sun.com/docs/books/jls/third_edition/html/arrays.html#10.7 ): "O comprimento do campo final público, que contém o número de componentes da matriz ( comprimento pode ser positivo ou zero). "
Michael Myers
19

Além disso, provavelmente é útil notar que, se você tiver uma matriz multidimensional, poderá obter a respectiva dimensão apenas anexando um '[0]' à matriz que está consultando até chegar ao eixo / tupla / dimensão apropriada.

Provavelmente, isso é melhor explicado com o seguinte 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
    }

}

Qual produz a saída:

5
12
Liang
fonte
15

propriedade final array.length

é propriedade pública e final. É final porque as matrizes em Java são imutáveis ​​por tamanho (mas mutáveis ​​pelo valor do elemento)

dfa
fonte
14

Matrizes são objetos e possuem um campo de comprimento.

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

haha.length seria 2

willcodejavaforfood
fonte
Apenas para escolher. Mas acredito que matrizes NÃO são objetos em Java - eles são um dos dois tipos de referência de variáveis. O outro sendo objetos.
Jabbie
2
@jabbie: Sério? Você tem uma referência para isso? Eu apenas questiono, porque você pode dizer Objeto o = new String [] {"olá"};
23416 Simon Nickerson
Simon: Eu acho que a razão dessa declaração funcionar é porque eles introduziram as classes reflexivas para todos os tipos primitivos.
27511 Brian Sweeney
9
Leia a primeira frase de docs.oracle.com/javase/specs/jls/se8/html/jls-10.html e tente nos dizer que matrizes não são objetos. ;)
Michael Myers
1
você poderia ter usado algum outro nome de variável, é tão perturbador para mim
Espaço Rocker
11

Em java, há um lengthcampo que você pode usar em qualquer matriz para descobrir seu tamanho:

    String[] s = new String[10];
    System.out.println(s.length);
bruno conde
fonte
1
obrigado por não entrar em detalhes técnicos sobre o que pode ou não ser e simplesmente fornecer uma resposta curta e concisa. +1 para você. :)
Joshua Burns
9

Se você deseja uma função para fazer isso

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

Isso pode ser útil se você não souber que tipo de matriz você possui, por exemplo, int [], byte [] ou Objeto [].

Peter Lawrey
fonte
6

Há uma diferença entre o comprimento Stringe o arrayesclarecimento:

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
fonte
Isso deve ser atualizado na pergunta se for um esclarecimento.
WhiteCat
5

A resposta é "Todos eles". Uma matriz java é alocada com um número fixo de slots de elemento. O atributo "length" indica quantos. Esse número é imutável por toda a vida útil da matriz. Para um equivalente redimensionável, você precisa de uma das classes java.util.List - onde é possível usar o método size () para descobrir quantos elementos estão em uso.

No entanto, há "Em uso" e depois há Em uso . Em uma matriz de objetos de classe, é possível ter slots de elementos cujos elementos são objetos nulos, mesmo que contem no atributo length, mas nas definições da maioria das pessoas, eles não estão em uso (YMMV, dependendo do aplicativo). Não há função interna para retornar as contagens nulas / não nulas.

Os objetos de lista têm ainda outra definição de "Em uso". Para evitar a criação / destruição excessiva das estruturas de armazenamento subjacentes, normalmente há algum preenchimento nessas classes. É usado internamente, mas não é contado no método size () retornado. E se você tentar acessar esses itens sem expandir a Lista (por meio dos métodos add), receberá uma exceção de índice ilegal.

Portanto, para Listas, você pode ter "Em Uso" para elementos confirmados não nulos, Todos os elementos confirmados (incluindo elementos nulos) ou Todos os elementos, incluindo o espaço de expansão atualmente alocado.

Tim H
fonte
2

Todas as respostas acima são adequadas. O importante a observar é que as matrizes têm o atributo length, mas não o método length. Sempre que você usa strings e matrizes em java, os três modelos básicos que você pode enfrentar são:

  1. String s = new String ("vidyasagar");
    System.out.println (s.length ()); // Nesse caso, estamos usando apenas String. Nenhum atributo de comprimento para Strings. nós temos que usar o método length ().
  2. int [] s = novo int [10]; System.out.println (s.length); // aqui usamos o atributo length das matrizes.
  3. String [] s = new String [10];
    System.out.println (s.length); // Aqui, embora o tipo de dados seja String, não é uma única String. s é uma referência para a matriz de Strings. Portanto, usamos o atributo length das matrizes para expressar quantas seqüências de caracteres podem caber nessa matriz.
vidyasagar
fonte
1

Não é realmente a resposta para sua pergunta, mas se você quiser ter algo como uma matriz que possa crescer e encolher, não use uma matriz em java. Você provavelmente é o melhor usando ArrayList ou outra implementação de lista.

Você pode chamar size () para obter o tamanho.

Simon Groenewolt
fonte