Matriz de objetos em Java
⚡ Resumo Inteligente
Matriz de objetos em Java Armazena referências de objetos em um espaço contíguo de tamanho fixo, permitindo que uma única variável contenha várias instâncias de uma classe e acesse cada uma delas por meio de um índice para iteração, mutação e passagem para métodos.
O que é um array de objetos em Java?
A Java matriz de objetos Armazena múltiplas instâncias de objetos da mesma classe em um único contêiner de tamanho fixo. Ao contrário de um array primitivo que armazena valores como int, double, ou boolean Diretamente em cada slot, uma matriz de objetos é armazenada. referênciasCada slot aponta para a localização de memória de um objeto, e o próprio objeto reside no slot. Java pilha.
Este layout corresponde à forma como qualquer objeto variável in Java Funciona. O array simplesmente agrupa várias referências de objetos para que você possa acessá-las por índice. É a escolha natural quando o número de objetos é conhecido antecipadamente e não muda durante a execução do programa.
Sintaxe
ClassName[] obj = new ClassName[array_length];
O lado direito reserva espaço para array_length referências, todas inicializadas para nullNenhum objeto de ClassName ainda existe, apenas o contêiner que pode armazenar referências a tais objetos.
Como criar um array de objetos em Java
Criar um array de objetos funcional sempre requer duas etapas de alocação. A primeira aloca o contêiner de referência e a segunda aloca cada objeto para o qual o contêiner apontará.ping O segundo passo é a fonte mais comum de NullPointerException para iniciantes Java código.
Passo 1) Abra o seu editor de código e copie o seguinte código:
class ObjectArray { public static void main(String args[]) { Account obj[] = new Account[2]; // obj[0] = new Account(); // obj[1] = new Account(); obj[0].setData(1, 2); obj[1].setData(3, 4); System.out.println("For Array Element 0"); obj[0].showData(); System.out.println("For Array Element 1"); obj[1].showData(); } } class Account { int a; int b; public void setData(int c, int d) { a = c; b = d; } public void showData() { System.out.println("Value of a = " + a); System.out.println("Value of b = " + b); } }
Passo 2) Salve o arquivo como ObjectArray.javaEm seguida, compile e execute o programa.
Passo 3) Observe o erro. Tente depurá-lo antes de prosseguir para a Etapa 4.
Passo 4) Inspecione a linha Account obj[] = new Account[2];Ele aloca um array de duas variáveis de referência do tipo Accountmas não aloca nenhum Account objetos. Ambos os compartimentos comportam nulle chamando obj[0].setData(...) com um null a referência lança uma NullPointerException em tempo de execução.
Passo 5) Remova o comentário das linhas 4 e 5. Essas duas linhas criam o real Account objetos e atribuí-los a obj[0] e obj[1]O array agora contém referências reais e o código é executado sem problemas.
Saída:
For Array Element 0 Value of a = 1 Value of b = 2 For Array Element 1 Value of a = 3 Value of b = 4
Como inicializar um array de objetos em Java
Além da inicialização baseada em setters mostrada acima, um array de objetos pode ser inicializado de três maneiras mais limpas. Cada estilo troca verbosidade por clareza, então escolha aquele que melhor se adapta à situação.
- Inicialização do loop — Aloca-se o array, depois percorre-se cada índice e atribui-se um novo objeto. Este é o padrão para arrays grandes ou quando a quantidade de objetos é dinâmica.
- Inicialização do construtor — passar valores diretamente para o construtor no momento da criação, para que nenhuma chamada setter separada seja necessária.
- Inicialização de literais de matriz — declarar e preencher em uma única instrução com um inline
{ ... }Inicializador, ideal para pequenos conjuntos fixos.
class Account { int a, b; public Account(int a, int b) { // constructor this.a = a; this.b = b; } } public class InitDemo { public static void main(String[] args) { // 1) Loop initialisation Account[] loopArr = new Account[3]; for (int i = 0; i < loopArr.length; i++) { loopArr[i] = new Account(i, i * 10); } // 2) Constructor initialisation, one slot at a time Account[] ctorArr = new Account[2]; ctorArr[0] = new Account(1, 2); ctorArr[1] = new Account(3, 4); // 3) Array literal initialisation Account[] litArr = { new Account(5, 6), new Account(7, 8), new Account(9, 10) }; System.out.println("loop size = " + loopArr.length); System.out.println("ctor size = " + ctorArr.length); System.out.println("literal size= " + litArr.length); } }
A inicialização em loop é a opção padrão mais segura, pois garante que nenhum espaço seja deixado em branco. nullA inicialização por construtor explicita a intenção quando cada objeto precisa de argumentos diferentes, e os literais de array mantêm o código de demonstração compacto. Não misture estilos dentro do mesmo array, a menos que haja um motivo: a consistência facilita a detecção de erros.
Iterando e acessando elementos em um Java Matriz de Objetos
Uma vez que um array de objetos esteja preenchido, três padrões atendem a quase todas as necessidades de acesso. Escolha o estilo de loop que melhor se adapte ao nível de controle que o código precisa sobre o índice.
Clássicos for laço Dá acesso ao índice, o que é útil para substituir elementos, comparar vizinhos ou iterar sobre um subintervalo.
for (int i = 0; i < obj.length; i++) { System.out.println("Element " + i); obj[i].showData(); }
Eficiência for laço (O laço “for-each”) oculta o índice e torna a leitura mais natural quando o índice não é necessário:
for (Account acc : obj) {
acc.showData();
}
Fluxos (Java 8 e posteriores) Converter o array em um pipeline, o que é útil para filtrar e mapear.pingou agregando sem escrever um loop:
import java.util.Arrays;
Arrays.stream(obj)
.filter(acc -> acc.a > 0)
.forEach(Account::showData);
Para ler ou atualizar um único elemento, use o acesso direto ao índice, por exemplo. obj[1].setData(10, 20)Sempre verifique o comprimento primeiro com obj.length evitar ArrayIndexOutOfBoundsExceptionQuando qualquer slot poderia ser null, proteja o acesso com uma verificação nula ou um Optional para manter o programa em execução em vez de travá-lo.
Matriz de objetos versus lista de objetos em Java
Um array simples de objetos é rápido e previsível, mas seu tamanho fixo se torna uma limitação assim que a quantidade de objetos muda em tempo de execução. JavaA estrutura de Coleções do 's fornece ArrayList como alternativa dinâmica. A tabela abaixo destaca quando cada opção é apropriada.
| Característica | Matriz de Objetos | Lista de objetos |
|---|---|---|
| Dimensões: | Corrigido na criação | Cresce e encolhe automaticamente |
| Declaração | Account[] a = new Account[5]; | List<Account> list = new ArrayList<>(); |
| Elemento de acesso | a[i] | list.get(i) |
| Adicionar elemento | Não é compatível após a criação. | list.add(obj) |
| Digite segurança | Tipado em tempo de compilação por declaração | Genéricos aplicados em tempo de compilação |
| Desempenho | Leituras indexadas ligeiramente mais rápidas | Adição amortizada O(1), com alguma sobrecarga por elemento. |
| Preferencialmente quando | O tamanho é conhecido e fixo. | O tamanho é desconhecido ou muda durante a execução. |
Use um array quando a utilização de memória restrita e a indexação previsível forem importantes, por exemplo, em layouts de matriz ou em caminhos críticos de desempenho. Recorra a ArrayList Na maioria dos códigos de aplicação do dia a dia, isso ocorre porque a capacidade de adicionar e remover sem realocação compensa a pequena sobrecarga por elemento.



