Bom, no seu caso até dá para usar o tal do Vector < Vector < Integer > > . Mas você ainda vai ter alguns probleminhas, não sei se é a melhor solução. Acho que é meio complicado.
import java.util.*;
class VectorVectorInteger {
public static void main(String[] args) {
//-- Declarando um vetor [5][4] (entendido no sentido Java da coisa, ou seja,
//-- 5 linhas de 4 colunas) e o preenchendo com (linha + 7 * coluna)
Vector< Vector <Integer > > vvi = new Vector< Vector <Integer> >();
for (int linha = 0; linha < 5; ++linha) {
Vector<Integer> vi = new Vector<Integer>();
for (int coluna = 0; coluna < 4; ++coluna) {
vi.add(linha + 7 * coluna);
}
vvi.add(vi);
}
//-- Imprimindo o vetor - é impresso como
// [[0, 7, 14, 21], [1, 8, 15, 22], [2, 9, 16, 23], [3, 10, 17, 24], [4, 11, 18, 25]]
System.out.println (vvi);
//-- Imprimindo o valor [3][2] - note que as coordenadas começam por zero, isto dá a quarta
//-- linha, terceira coluna, ou seja, 17
System.out.println (vvi.get(3).get(2));
//-- Alterando o valor [3][2] para 18, e imprimindo de novo
vvi.get(3).set(2, 18); // note que é get/set, não set/set como você pensaria
System.out.println (vvi);
//-- Agora você quer aumentar a matriz para [6][7], pondo o valor -(linha * 2 + coluna * 3)
//-- nas posições novas - os números negativos é só para você ver com mais facilidade.
//-- Você vai ter de fazer algo meio nojento:
//-- A) Adicionar mais colunas à matriz anterior:
for (int linha = 0; linha < 5; ++linha) {
Vector<Integer> vi = vvi.get(linha);
for (int coluna = 4; coluna < 7; ++coluna) {
vi.add(-(linha * 2 + coluna * 3));
}
vvi.add(vi);
}
//-- B) Adicionar mais linhas à matriz anterior.
for (int linha = 5; linha < 6; ++linha) {
Vector<Integer> vi = new Vector<Integer>();
for (int coluna = 0; coluna < 7; ++coluna) {
vi.add(-(linha * 2 + coluna * 3));
}
vvi.add(vi);
}
//-- Agora imprimindo...
System.out.println (vvi);
}
}
Você pode ainda usar uma outra coisa que é muito nojenta. Se você tiver uma matriz muito, muito esparsa, onde apenas uns poucos elementos são zero, você pode usar uma “matriz associativa”. A idéia é a seguinte: guarde uma lista das posições que não são zero e as associe com os valores. Isso pode ser feito usando um Map < XY, Integer > onde XY é uma classe contendo dois valores int. Se não for encontrado no Map, então o valor é zero. Se precisar inserir um elemento na matriz, use o método “put” de Map. Isso é mais rápido que você pensa, use HashMap ou TreeMap.
EDIT - não tinha visto que você (e eu) estávamos usando Vector. Vector usa umas primitivas de sincronização que a fazem relativamente lenta, principalmente em máquinas multiprocessadas. Use ArrayList.