Sunteți pe pagina 1din 4

23/7/2014 Como fazer ArrayList bidimensional?

- Javafree: O fórum de Java que mais cresce

Assine 0800 703 3000 SAC Bate-papo E-mail Notícias Esporte Entretenimento Mulher Shopping BUSCAR

Seja bem vindo ao Fórum do JavaFree.org


Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login

ÍNDICE | NOTÍCIAS | TUTORIAIS | RECENTES | LOGIN | REGISTRE-SE


Pesquisar

Página Inicial do Fórum > Java Básico

Como fazer ArrayList bidimensional?


0 0 Curtir 0

easy Java Magazine 41 Java Magazine 129


Simplificação das Threads: Processamento Big Data com Hadoop: simplificando soluções
paralelo de modo eficiente e síncrono MapReduce na prática

Publicado em: 15/07/2013 16:50:35

Olá,

Mo5ka
Posts:21 Estou fazendo um jogo do tipo "warcraft"/"age of empires" e tenho que gerenciar a posição das
unidades(objeto Unidade) nas cordenadas X e Y.

Pensei em usar um ArrayList bidimensional, onde as cordenadas seriam os indices, mas eu não sei como
fazer isso, alguem poderia me mostrar como iniciar, ler e regravar um array assim?

LEMBRANDO que eu quero armazenar no ArrayList SOMENTE as unidades ativas...cordenadas vazias


serão ignoradas já que a area é muito grande(por isso não posso usar arrays normal de tamanho fixo).

staroski Obrigado.
Posts:3763

Publicado em: 15/07/2013 18:34:17

Assim como um array bi-dimensional nada mais é do que um array de arrays, uma lista bidimensional
pode ser representada por uma lista de listas:

List<List<TipoDeDado>> listaDeListas = new ArrayList<List<TipoDeDado>>();


thiagovpalmeir
Posts:1451

_________________
Ricardo Artur Staroski, OCP-JP
Blumenau - SC
Conheça minhas APIs e respectiva documentação

Publicado em: 15/07/2013 22:42:59

Veja esse artigo, talvez possa te ajudar...

http://www.devmedia.com.br/trabalhando-com-arrays-em-java/25530
staroski
Posts:3763 _________________
Site: http://www.varallos.com.br

http://javafree.uol.com.br/topic-891492-Como-fazer-ArrayList-bidimensional.html 1/4
23/7/2014 Como fazer ArrayList bidimensional? - Javafree: O fórum de Java que mais cresce
Grupo Java Brazuka: http://www.facebook.com/groups/421210044593467/
FanPage: http://www.facebook.com/varallosweb
Space Devmedia: http://www.devmedia.com.br/ThiagoVaralloPalmeira
Twitter: http://twitter.com/varallos1
Youtube: http://www.youtube.com/user/varallos1
Varallo´s Fóruns: http://www.varallos.com.br/foruns

Publicado em: 15/07/2013 18:34:17

Parando pra pensar, acredito que seja mais otimizado você utilizar dois Maps ao invés de duas Lists.

Mo5ka
Posts:21 Criei uma classe que implementa a funcionalidade de uma matriz bidimensional, vejá só:

Código de teste:

public class Teste {

public static void main(String[] args) {


// criando uma matriz dinâmica de String, poderia ser de qualquer outra coisa
MatrizDinamica<String> matriz = new MatrizDinamica<String>();

int linhas = 10;


int colunas = 5;

for (int i = 0; i < linhas; i++) {


for (int j = 0; j < colunas; j++) {
String elemento = "linha: " + i + ", coluna: " + j;
matriz.set(i, j, elemento); // inserindo o elemento
}
}

for (int i = 0; i < linhas; i++) {


for (int j = 0; j < colunas; j++) {
String elemento = matriz.get(i, j); // obtendo o elementos
System.out.println(elemento);
}
}

}
}

Agora a implementação da matriz dinamica:

import java.util.*;

public class MatrizDinamica<T> {

private final Map<Integer, Map<Integer, T>> elementos = new HashMap<Integer, Map<Integer, T>>();

public void set(int linha, int coluna, T elemento) {


Map<Integer, T> colunas = getColunas(linha);
Integer chave = Integer.valueOf(coluna);
if (elemento != null) {
colunas.put(chave, elemento);
} else {
colunas.remove(chave);
}
}

public T get(int linha, int coluna) {


Map<Integer, T> colunas = getColunas(linha);
Integer chave = Integer.valueOf(coluna);
T elemento = colunas.get(chave);
return elemento;
}

private Map<Integer, T> getColunas(int linha) {


int chave = Integer.valueOf(linha);
Map<Integer, T> colunas = elementos.get(chave);
if (colunas == null) {
colunas = new HashMap<Integer, T>();
elementos.put(chave, colunas);
}
return colunas;
}
}

_________________
Ricardo Artur Staroski, OCP-JP
Blumenau - SC
Conheça minhas APIs e respectiva documentação

http://javafree.uol.com.br/topic-891492-Como-fazer-ArrayList-bidimensional.html 2/4
23/7/2014 Como fazer ArrayList bidimensional? - Javafree: O fórum de Java que mais cresce

Publicado em: 15/07/2013 16:50:35

staroski
Parando pra pensar, acredito que seja mais otimizado você utilizar dois Maps ao invés de duas Lists.

staroski Cara nossa, valew, ajudou muito...só uma duvida, pq o hashmap é melhor que o arraylist neste caso
Posts:3763
especifico?

Ah...e desculpe a ignorancia em hashmap, nunca tinha usado...como faço para destruir um elemento? E
para mover um elemento para outro indice?

Valew

Publicado em: 15/07/2013 18:34:17

A diferença entre um List e um Map é que um List guarda seus elementos em índices e um Map utiliza
chaves.
No seu caso, as chaves vão ser o número da linha num Map e o número da coluna em outro Map.
thiagovpalmeir
Posts:1451
Para remover um elemento você utiliza o método remove, se você olhar a implementação que fiz, isso
acontece no método set da classe MatrizDinamica, se tu setar um elemento como null, o elemento que
estava naquela coordenada, vai ser removido.

Se você quisesse usar List teria que ter uma estrutura de dados propria pra poder mapear a linha e
coluna do objeto inserido, daria um trabalhão, imagina que sua lista tenha 10 elementos e você quer
inserir um na posição 20, terias que inserir 9 elementos dummy para poder aí inserir no índice 20 o
objeto que você quer.

Com o Map não acontece isso, o Map não é uma lista encadeada, ele é um par chave-valor.
_________________
Ricardo Artur Staroski, OCP-JP
Blumenau - SC
Conheça minhas APIs e respectiva documentação

Publicado em: 15/07/2013 22:42:59

Bacana muito bem bolado o código...


_________________
leonardooliveira
Posts:1101 Site: http://www.varallos.com.br
Grupo Java Brazuka: http://www.facebook.com/groups/421210044593467/
FanPage: http://www.facebook.com/varallosweb
Space Devmedia: http://www.devmedia.com.br/ThiagoVaralloPalmeira
Twitter: http://twitter.com/varallos1
Youtube: http://www.youtube.com/user/varallos1
Varallo´s Fóruns: http://www.varallos.com.br/foruns

Publicado em: 17/07/2013 13:46:17

Monstruoso esse codigo!!!

staroski
Posts:3763 Publicado em: 15/07/2013 18:34:17

leonardooliveira
Monstruoso esse codigo!!!

Monstruoso porque?
Não vejo monstruosidade em um método set para setar o elemento numa posição e um método get para
Relacionados obter o elemento de determinada posição...
_________________
Ricardo Artur Staroski, OCP-JP
Blumenau - SC
Conheça minhas APIs e respectiva documentação

http://javafree.uol.com.br/topic-891492-Como-fazer-ArrayList-bidimensional.html 3/4
23/7/2014 Como fazer ArrayList bidimensional? - Javafree: O fórum de Java que mais cresce

Classe Calculadora
http://javafree.uol.com.br/topic-865464-Classe-Calculadora.html

os exercicios 1,2,e 3 estao funcionando perfeitamente, agora montei o ex 4 para chamar algum
dentro dos anteriores
http://javafree.uol.com.br/topic-893862-os-exercicios-12e-3-estao-funcionando-
perfeitamente-agora-montei-o-ex-4-para-chamar-algum-dentro-dos-anteriores.html

Povoar Combobox com nomes de arquivos do diretório.


http://javafree.uol.com.br/topic-893864-Povoar-Combobox-com-nomes-de-arquivos-do-
diretorio.html

Banco de Dados Bluej


http://javafree.uol.com.br/topic-893858-Banco-de-Dados-Bluej.html

cannot find symbol


http://javafree.uol.com.br/topic-893861-cannot-find-symbol.html

Índice do forum -> Java Básico

Powered by JavaBB 0.99

http://javafree.uol.com.br/topic-891492-Como-fazer-ArrayList-bidimensional.html 4/4

S-ar putea să vă placă și