Comprimento do array em Java

101

Eu declarei uma matriz conforme mostrado abaixo:

int[] arr = new int[10];

Em seguida, atribuí os seguintes valores ao array:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
arr[3] = 4;

Então eu declarei e inicializei uma variável inteira:

int arrayLength = arr.length;

Isso será útil para encontrar o tamanho real, mas existe algum método para encontrar o tamanho lógico do array?

Kiran Bhat
fonte

Respostas:

86

Ele contém o tamanho alocado 10,. Os índices não atribuídos conterão o valor padrão 0para int.

Kai
fonte
3
Sim, os arrays são alocação de memória estática.
Ramon Saraiva
3
Você pode mostrar o javadoc? Não sei onde está essa propriedade de "comprimento".
Philip Rego
1
@PhilipRego Está na especificação de idioma docs.oracle.com/javase/specs/jls/se8/html/jls-10.html#jls-10.3
Torben
71

Em primeiro lugar, lengthé uma propriedade, então seria em arr.lengthvez de arr.length().

E ele retornará 10, o tamanho declarado. Os elementos que você não declara explicitamente são inicializados com 0.

Costi Ciudatu
fonte
Não é possível invocar length () no tipo de matriz long [] Java (67108980)
Alessandro Ornano
22

Para encontrar o comprimento de uma matriz, Avocê deve usar a lengthpropriedade. É como A.length, não use A.length()seu principalmente usado para tamanho de objetos relacionados a string.

insira a descrição da imagem aqui

A propriedade length sempre mostrará o espaço total alocado para a matriz durante a inicialização.

Se você tiver algum desses tipos de problemas, a maneira mais simples é executá-lo. Boa programação!

Ravi Pandey
fonte
6

Matrizes são alocação de memória estática, portanto, se você inicializar uma matriz de inteiros:

int[] intArray = new int[15];

O comprimento será sempre 15, não importa quantos índices sejam preenchidos.

E outra coisa, quando você inicializa uma matriz de inteiros, todos os índices serão preenchidos com "0".

Ramon Saraiva
fonte
5

Em Java, seu tamanho "real" e "lógico" são os mesmos. O tempo de execução preenche todos os slots da matriz com valores padrão na alocação. Portanto, seu acontém 10.

Dirk
fonte
5

Nesse caso, arr.length retornará 10, o tamanho do array que você alocou. O tamanho lógico realmente não se aplica aqui, pois este é um array de comprimento fixo.

Quando você inicializa a matriz:

int[] arr = new int[10];

Java criará uma matriz com 10 elementos e inicializará todos eles para 0. Consulte as especificações da linguagem Java para obter detalhes dos valores iniciais para este e outros tipos primitivos.

Tom Elliott
fonte
4
int[] arr = new int[10];

arré uma intmatriz de tipo que tem tamanho 10. É um conjunto de 10elementos. Se não inicializarmos um array por padrão, os elementos do array contêm o valor padrão. No caso de int array, o valor padrão é 0.

length é uma propriedade aplicável a uma matriz.
aqui arr.lengthvai dar 10.

Anil
fonte
3

`

matriz int [] = novo int [3]; array.length;

então aqui nós criamos um array com um espaço de memória de 3 ... é assim que parece

0º 1º 2º ...........> Índice 2 4 5 ...........> Número

Então, como você pode ver, o tamanho deste array é 3, mas o índice do array é apenas até 2, pois qualquer array começa com 0º índice.

a saída da segunda instrução deve ser 3, pois o comprimento da matriz é 3 ... Por favor, não se confunda entre o valor do índice e o comprimento da matriz ....

Felicidades!

Ayush Murty AH
fonte
2
  int arr[]={4,7,2,21321,657,12321};
  int length =arr.length;
  System.out.println(length); // will return 6

  int arr2[] = new int[10];
   arr2[3] = 4;
  int length2 =arr2.length;
  System.out.println(length2); // // will return 10. all other digits will be 0 initialize because staic memory initialization
alok
fonte
1

Ele conterá o tamanho real do array, já que foi ele que você inicializou quando o declarou. Java não tem nenhum conceito de tamanho "lógico" de uma matriz, no que diz respeito ao valor padrão de 0 é tão lógico quanto os valores que você definiu manualmente.

Turix
fonte
1

Ele contém o tamanho alocado, 10. Os índices restantes conterão o valor padrão que é 0.

Nikhil Kumar
fonte
1

Se você quiser o tamanho lógico do array, pode percorrer todos os valores do array e compará-los com zero. Incremente o valor se não for zero e esse seria o tamanho lógico. Como o tamanho do array é fixo, você não tem nenhum método embutido, talvez você deva dar uma olhada nas coleções.

Struse
fonte
Este é apenas um tamanho "Presumo que 0 não seja um valor válido" e, se isso for útil, é duvidoso.
Tom
Acabei de ter uma ideia para obter o comprimento do array (0's são inválidos). Como eu disse, você pode usar coleções para uma manipulação de dados mais precisa.
Struse 01 de
1

Deveria ser:

int a = arr.length;

Parênteses devem ser evitados.

Godlu
fonte
5
Bem-vindo ao estouro de pilha! Como essa pergunta tem mais de um ano e já tem seis outras respostas, eu esperaria uma resposta muito bem diferente dessa. Além disso, você não está respondendo ao ponto da pergunta - apenas corrigindo um erro de digitação que já foi direcionado em uma resposta (que responde à pergunta) e um comentário da pergunta.
John Dvorak de
0

Os arrays Java são, na verdade, de tamanho fixo e as outras respostas explicam como .length não está realmente fazendo o que você esperava. Gostaria apenas de acrescentar que, dada a sua pergunta, o que você pode querer usar é um ArrayList, que é um array que pode aumentar e diminuir:

https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html

Aqui, o método .size () mostrará o número de elementos em sua lista, e você pode aumentá-lo à medida que adiciona coisas.

draxil
fonte
0

se você quer dizer com "tamanho lógico", o índice do array, então simplesmente int arrayLength = arr.length-1; uma vez que o índice do array começa com "0", então o lógico ou "índice do array" sempre será menor que o tamanho real em "um".

Salah
fonte
0

Os arrays são alocados na memória em tempo de compilação em java, então eles são estáticos, os elementos não explicitamente definidos ou modificados são definidos com os valores padrão. Você poderia usar algum código como este, embora não seja recomendado, pois não conta os valores padrão, mesmo se você inicializá-los explicitamente dessa forma, também é provável que cause bugs na linha. Como outros disseram, ao procurar pelo tamanho real, ".length" deve ser usado em vez de ".length ()".

public int logicalArrayLength(type[] passedArray) {
    int count = 0;
    for (int i = 0; i < passedArray.length; i++) {
        if (passedArray[i] != defaultValue) {
            count++;
        }
    }
    return count;
}
Poobean
fonte