Eu nunca ouvi falar em um ArrayList bidimensional, ouvi falar de array bidimensional (ou até multidimensional). Talvez esse tal ArrayList bidimensional seja análogo ao array bidimensional.
Partindo deste pressuposto, então um dito “ArrayList bidimensional” nada mais seria que um ArrayList que armazena outros ArrayLists.
Vamos ver algum exemplinho simples:
Imagine que queiramos listar os funcionarios de uma pequena consultoria de informática que tem apenas tres tipos de pessoal: Desenvolvedores, auxiliares administrativos e os executivos.
Podemos ter aí uma classe para cada tipo de funcionário (Poderia utilizar aqui conceitos de herança, mas não vou fazê-lo, pra simplificar a vida de quem ainda não conhece herança).
Primeiro, a classe Desenvolvedor:
package br.com.osmio.funcionarios;
public class Desenvolvedor {
private String nome;
private String cpf;
private String especialidade;
private double salarioBase;
public Desenvolvedor(
String nome,
String cpf,
String especialidade,
double salarioBase)
{
this.nome = nome;
this.cpf = cpf;
this.especialidade = especialidade;
this.salarioBase = salarioBase;
}
public String getCpf() {
return cpf;
}
public String getEspecialidade() {
return especialidade;
}
public String getNome() {
return nome;
}
public double getSalarioBase() {
return salarioBase;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public void setEspecialidade(String especialidade) {
this.especialidade = especialidade;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setSalarioBase(double salarioBase) {
this.salarioBase = salarioBase;
}
public String toString() {
return
"Desenvolvedor: " + nome + " - " + cpf +
". Especialista em " + especialidade
;
}
}
Agora a classe AuxAdmin
package br.com.osmio.funcionarios;
public class AuxAdmin {
private String nome;
private String cpf;
private double salarioBase;
public AuxAdmin(String nome, String cpf, double salarioBase) {
this.nome = nome;
this.cpf = cpf;
this.salarioBase = salarioBase;
}
public String getCpf() {
return cpf;
}
public String getNome() {
return nome;
}
public double getSalarioBase() {
return salarioBase;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setSalarioBase(double salarioBase) {
this.salarioBase = salarioBase;
}
public String toString() {
return "Auxiliar Administrativo: " + nome + " - " + cpf;
}
}
E, finalmente, a classe Executivo
package br.com.osmio.funcionarios;
public class Executivo {
private String nome;
private String cpf;
private String areaGerencia;
private double proLabore;
public Executivo(String nome, String cpf, String areaAtuacao, double proLabore) {
this.nome = nome;
this.cpf = cpf;
this.areaGerencia = areaAtuacao;
this.proLabore = proLabore;
}
public String getAreaGerencia() {
return areaGerencia;
}
public String getCpf() {
return cpf;
}
public String getNome() {
return nome;
}
public double getProLabore() {
return proLabore;
}
public void setAreaGerencia(String areaAtuacao) {
this.areaGerencia = areaAtuacao;
}
public void setCpf(String cpf) {
this.cpf = cpf;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setProLabore(double proLabore) {
this.proLabore = proLabore;
}
public String toString() {
return
"Executivo: " + nome + " - " + cpf +
". Responsável pela área de " + areaGerencia
;
}
}
Agora, vamos fazer uma classe com um método main que vai simular a seguinte situação: Um programa que pega “de fora” um ArrayList de Desenvolvedores, um de AuxAdmins e outro de Executivos. Vamos então dar um jeito de listar todos os funcionários utilizando um ArrayBidimensional.
package br.com.osmio.funcionarios;
import java.util.ArrayList;
public class Teste {
public static void main(String[] args) {
ArrayList<ArrayList> funcionarios =
new ArrayList<ArrayList>();
/*Armazena no ArrayList funcionarios um outro ArrayList
* contendo objetos do tipo Desenvolvedor*/
funcionarios.add(getDesenvolvedores());
/*Armazena no ArrayList funcionarios um outro ArrayList
* contendo objetos do tipo AuxAdmin*/
funcionarios.add(getAuxAdmins());
/*Armazena no ArrayList funcionarios um outro ArrayList
* contendo objetos do tipo Executivo*/
funcionarios.add(getExecutivos());
/*Aqui acho que seja mais ou menos o que vc queria ver.
* Iteramos primeiro sobre cada elemento de "funcionarios"*/
for (ArrayList list : funcionarios) {
/*... Depois, iteramos sobre os elementos encontrados
* dentro do ArrayList que foi, por sua vez, encontrado
* dentro de "funcionarios"*/
for (Object funcionario : list) {
/*Invocamos o método toString() do elemento*/
System.out.println(funcionario.toString());
}
System.out.println("============================");
}
System.exit(0);
}
/*Este método obtem um ArrayList com os executivos da empresa.
* Faça de conta que este método obtem os executivos através de
* uma consulta a um banco de dados, por exemplo*/
private static ArrayList<Executivo> getExecutivos() {
ArrayList<Executivo> executivos =
new ArrayList<Executivo>();
executivos.add(
new Executivo(
"Fulano da Silva",
"[CPF removido]",
"Desenvolvimento",
82025.69
)
);
executivos.add(
new Executivo(
"Bentrano Silveira",
"[CPF removido]",
"Finanças",
68963.55
)
);
executivos.add(
new Executivo(
"Rolando Lero",
"[CPF removido]",
"Negócios",
75000.00
)
);
return executivos;
}
/*Este método obtem um ArrayList com os auxiliares adm. da empresa.
* Faça de conta que este método obtem os auxiliares através de
* uma consulta a um banco de dados, por exemplo*/
private static ArrayList<AuxAdmin> getAuxAdmins() {
ArrayList<AuxAdmin> auxAdmins =
new ArrayList<AuxAdmin>();
auxAdmins.add(
new AuxAdmin(
"Maria da Graça",
"[CPF removido]",
1526.36
)
);
auxAdmins.add(
new AuxAdmin(
"Martinho Fragoso D'Antonionni",
"[CPF removido]",
2556.96
)
);
return auxAdmins;
}
/*Este método obtem um ArrayList com os desenvolvedores da empresa.
* Faça de conta que este método obtem os desenvolvedores através de
* uma consulta a um banco de dados, por exemplo*/
private static ArrayList<Desenvolvedor> getDesenvolvedores() {
ArrayList<Desenvolvedor> desenvolvedores =
new ArrayList<Desenvolvedor>();
desenvolvedores.add(
new Desenvolvedor(
"Luciano Mantuaneli",
"[CPF removido]",
"Java",
15025.63
)
);
desenvolvedores.add(
new Desenvolvedor(
"Noam Chomsky",
"[CPF removido]",
"Linguagens Formais",
589256.36
)
);
desenvolvedores.add(
new Desenvolvedor(
"Bill Gates",
"[CPF removido]",
"C#",
[telefone removido].99
)
);
return desenvolvedores;
}
}
Não sei se era isso que vc tinha em mente. Não sei também se ficaram dúvidas. Qq coisa, poste mais, ok?