Como posso obter o tamanho de uma matriz, uma coleção ou uma string em Java?

Quais são as diferentes maneiras de acessar o tamanho de uma matriz, uma coleção ( List , Set , etc.) e um object String ? Por que isso é diferente?

   

Abreviada:

Para uma matriz: use .length .

Para uma Collection (ou Map ): use .size() .

Para um CharSequence (que inclui CharBuffer , Segment , String , StringBuffer e StringBuilder ): use .length() .


Matrizes

Um usaria a propriedade .length em uma matriz para acessá-lo. Apesar de um array ser um Object criado dinamicamente, o mandato para a propriedade length é definido pela especificação da linguagem Java, §10.3 :

Uma matriz é criada por uma expressão de criação de matriz (§15.10) ou por um inicializador de matriz (§10.6) .

Uma expressão de criação de matriz especifica o tipo de elemento, o número de níveis de matrizes aninhadas e o comprimento da matriz para pelo menos um dos níveis de aninhamento. O comprimento da matriz está disponível como um length variável da instância final.

Um inicializador de matriz cria uma matriz e fornece valores iniciais para todos os seus componentes.

Como o comprimento de uma matriz não pode ser alterado sem a criação de uma nova instância de matriz, os accesss repetidos de .length não alteram o valor , independentemente do que é feito na instância da matriz (a menos que sua referência seja substituída por uma matriz de tamanhos diferentes).

Por exemplo, para obter o tamanho de uma matriz unidimensional declarada, escreveríamos isto:

 double[] testScolors = new double[] {100.0, 97.3, 88.3, 79.9}; System.out.println(testScolors.length); // prints 4 

Para obter comprimentos em uma matriz n- dimensional, é preciso ter em mente que eles estão acessando uma dimensão da matriz por vez.

Aqui está um exemplo para uma matriz bidimensional.

 int[][] matrix = new int[][] { {1, 2, 3, 4}, {-1, 2, -3, 4}, {1, -2, 3, -4} }; System.out.println(matrix.length); // prints 3 (row length or the length of the array that holds the other arrays) System.out.println(matrix[0].length); // prints 4 (column length or the length of the array at the index 0) 

Isso é importante para usar, especialmente no caso de matrizes recortadas ; as colunas ou linhas nem sempre podem alinhar o tempo todo.

Coleções ( Set , List , etc.)

Para cada object que implementa a interface Collection , eles terão um método chamado size() com o qual acessar o tamanho geral da coleção.

Ao contrário dos arrays, as collections não têm tamanho fixo e podem ter elementos adicionados ou removidos a qualquer momento. Uma chamada para size() produzirá um resultado diferente de zero se, e somente se, houver algo adicionado à própria lista.

Exemplo:

 List shoppingList = new ArrayList<>(); shoppingList.add("Eggs"); System.out.println(shoppingList.size()); // prints 1 

Certas collections podem se recusar a adicionar um elemento, seja porque é null ou duplicado (no caso de um Set ). Nesse caso, adições repetidas à coleção não farão com que o tamanho seja incrementado.

Exemplo:

 Set uniqueShoppingList = new HashSet<>(); uniqueShoppingList.add("Milk"); System.out.println(uniqueShoppingList.size()); // prints 1 uniqueShoppingList.add("Milk"); System.out.println(uniqueShoppingList.size()); // prints 1 

Acessar o tamanho de uma List> * é feito de maneira semelhante a um array irregular:

 List> oddCollection = new ArrayList<>(); List numbers = new ArrayList() {{ add(1); add(2); add(3); }}; oddCollection.add(numbers); System.out.println(oddCollection.size()); // prints 1 System.out.println(oddCollection.get(0).size()); // prints 3 

*: A Collection não tem o método get definido em sua interface.

Como um aparte, um Map não é uma Collection , mas também tem um método size() definido. Isso simplesmente retorna o número de pares de valores-chave contidos no Map .

String

Uma String possui um length() método length() definido. O que ele faz é imprimir o número de caracteres presentes nessa instância da String .

Exemplo:

 System.out.println("alphabet".length()); // prints 8 

Não se esqueça de CollectionUtils.size() da biblioteca commons , seu nulo é seguro para que você não precise anular a verificação antecipadamente.