Definir um array de ArrayList?

6 respostas
D

Boa noite.

Tenho uma classe Cidade e tenho uma classe estrada. Uma Cidade pode ter várias estradas adjacentes. O que pretendo é ter um array de Cidades e os elementos desse array sao Arraylist das suas estradas adjacentes. Não sei se isto será possivel fazer-se em java.

Se aguem puder ajudar, agradecia muito.

6 Respostas

ViniGodoy

Sim, é possível.

Você pode ter tanto um List de List, quando um Map com um List, caso queira referenciar por nome. Por exemplo:

List<List<String>> estradas = new ArrayList<List<String>>(); estradas.add(new ArrayList<String>()); estradas.add(new ArrayList<String>()); estradas.get(0).add("BR116"); estradas.get(0).add("BR114"); estradas.get(1).add("BR116");

Entretanto, eu recomendo que você crie uma classe chamada “Cidade” e uma classe “Estrada”. Então, coloque um List<Estrada> dentro da sua classe Cidade. E por fim, crie o List<Cidade>.

Se você estiver fazendo um programa similar ao Google Maps, essa estrutura não é mais adequada. O ideal seria usar um grafo, possivelmente implementado com uma lista de adjacência. Também usaria Lists, mas a forma que você as organiza é um pouco diferente. Aí será especialmente importante ter uma classe para as Estradas, já que você irá adicionar informações como quilometragem, pedágios, direção, etc.

D

Agradeço a explicação. Já agora, o que eu pretendia era precisamente “simular” um grafo; daí ter um array de arrayLists, onde o primeiro array seriam de cidades…
Mas mais uma vez obrigado pela explicação.

D
//FUNCAO QUE CALCULA TODAS AS ESTRADAS ADJACENTES A UMA CIDADE
public ArrayList<Estrada> calcEstradasAdja(ArrayList<Estrada> listEstradas){
	ArrayList<Estrada> listEstradasAdja = new ArrayList<Estrada>();
		
	for(Estrada item : listEstradas){
		if(item.getCidadeA().equals(nome) || item.getCidadeB().equals(nome))
			listEstradasAdja.add(item);
	}
	return listEstradasAdja;
}
	
//TENTATIVA DE CONSTRUIR UM GRAFO
public ArrayList<ArrayList<Estrada>> calcGrafo(ArrayList<Cidade> listCidade, ArrayList<Estrada> listEstradas){
	ArrayList<ArrayList<Estrada>> grafo = new ArrayList<ArrayList<Estrada>>();
		
	for(Cidade item : listCidade){
		grafo.add(calcEstradasAdja(listEstradas));
	}
		
	return grafo;
}

Esta é a minha "“tentativa” de construir um grafo dadas as cidades como os nós, e os respectivos vertices são as cidades adjacentes.
A pergunta agr que coloco é como imprimir no ecran esta informação para ver se os dados foram inseridos correctamente. por outras palavras como devo percorrer um ArrayList<ArrayList>.
Grato pela atenção

David

D

Esta é a minha "“tentativa” de construir um grafo dadas as cidades como os nós, e os respectivos vertices são as ESTRADAS (e nao cidades como disse no ultimo post) adjacentes.

ViniGodoy

dferrao:

A pergunta agr que coloco é como imprimir no ecran esta informação para ver se os dados foram inseridos correctamente. por outras palavras como devo percorrer um ArrayList<ArrayList>.
Grato pela atenção

Você percorre como faria com qualquer ArrayList comum.

for (ArrayList<Estrada> estradas : listEstradasAdja) { for (Estrada estrada : estradas) { System.out.print(estrada); System.out.println(" "); } System.out.println(); }

Volto a afirmar que seria interessante ter uma classe Cidade, que conteria a lista de estradas. E então uma lista de cidades.

public class Cidade {
   private String nome;
   private List<Estrada> estradas;

   //Ponha gets e sets interessantes aqui
}

List<Cidade> cidades = new ArrayList<Cidades>();
cidades.add(new Cidade("Lisboa"));
cidades.get(0).add(new Estrada("Estrada da Ameixoeira"));
cidades.get(0).add(new Estrada("Estrada da Buraca"));
D

Ok. Ja segui o seu conselho e de facto é uma excelente solução.
Mais uma vez obrigado pelas explicações.

Criado 1 de janeiro de 2011
Ultima resposta 2 de jan. de 2011
Respostas 6
Participantes 2