[Resolvido]Matriz Dinamica com uma de suas dimensões fixa!

Olá pessoal do GUJ! Estou com um problema em realizar uma pequena matriz dinamica. O que estou querendo realizar é o seguinte:

  • A matriz será do seguinte formato: "int[][] matriz = new int [(aqui havera um numero fixo, exemplo 3)][(E aqui eu gostaria que fosse de modo dinamico, como se fosse um Arraylist aqui, é possivel?)]

Aguardo respostas… =P

int x = ...;
int[][] matriz = new int[3][x];

Qual é a dificuldade? O único problema é que matrizes não são ArrayLists, e na hora que você definiu que x é 100 (por exemplo), a matriz continuará a ser 3 por 100 durante toda a sua vida útil, a menos que você fique alocando linhas com tamanhos diferentes de 100 depois da criação da matriz.

De modo geral, a menos que você saiba o que está fazendo, matrizes multidimensionais não são soluções adequadas para problemas do dia-a-dia.

Como você deve ter percebido, a maior dimensão que você consegue usar em uma matriz é 3 (por exemplo, um workbook do Excel. )

A ideia é boa, mas x indicado seria uma constante, certo? gostaria que no momento que eu colocar um objeto dentro da matriz sofra mudança na segunda dimensão.

Ex.:

No inicio a matriz é 3/0, assim que for adicionado um objeto, ela deve sofrer uma mudança para 3/1, quando adicionar outro objeto, vire 3/2, e assim por diante.
E depois quando remover algum objeto, ela deve diminuir. No momento ela esta 3/2, quando retirar um objeto, deve ficar 3/1.

Até onde eu sei não tem como fazer isso em Java.

Talvez faça um array de objetos do tipo ArrayList ou algo assim, ex:

ArrayList<int>[] = new ArrayList[3]();

Sei - você quer criar uma matriz esparsa, é isso?

Nesse caso, é melhor estudar como é a melhor forma de acessar e criar matrizes esparsas. Dica: não é através de matrizes multidimensionais, que não são a forma mais adequada de fazer isso em Java.

Procure por “matriz esparsa java” ou “sparse matrices Java”.

Um exemplo : veja esta resposta aqui no Stack overflow:

Veja a resposta com 20 pontos - ela é uma resposta muito boa.

Ou para fazer desse jeito que você está falando você teria que criar outra matriz, do tamanho que você quer, copiar os valores da primeira + o valor novo para essa nova matriz e então destruir a primeira.

Mas isso tem vários problemas como complexidade (e consequentemente manutenibilidade) e performance. A não ser que você esteja em um ambiente com muitíssimo pouca memória (e talvez ainda assim) eu diria que não vale a pena fazer isso.

Qual o contexto desse problema? Talvez possamos pensar em alguma solução melhor.

Um exemplo de matriz esparsa é realmente uma planilha Excel. Como você deve ter descoberto, uma planilha Excel pode ter milhões de linhas e milhares de colunas, mas você nunca usa todas elas. Se uma célula está vazia, ela realmente não ocupa espaço.

Muito Obrigado entanglement, e drigo.angelo. A resposta de voces ja estão dando uma ajuda em como posso resolver esta questão. Vou pesquisar mais sobre a matriz esparsa e voces conseguiram captar um pouco da ideia, a planilha excel é um bom exemplo =).

drigo.angelo: Sou iniciante com programação Java, sou aluno de Sistemas de Informação e ainda estou começando (2º Período). Para aperfeiçoar as hailidades em programação, estou desenvolvendo um jogo simples de RPG, onde há historia, combates, historias, combates, e … por ai vai, Hahaha. E minha duvida surgiu, como vou fazer uma mochila no qual seja divido por categorias, porém não precise criar uma matriz de valores estraordinários… Por exemplo, 1000, ou algo desse genero.

No seu caso (mochila) a estrutura de dados mais adequada provavelmente não será uma matriz (como eu disse, normalmente só se usam matrizes em certos casos), e sim um Map.