Realmente é impossível aumentar a capacidade de um vetor depois que você declara o valor, mas existem maneiras de contornar isso.
Sobre como aumentar a capacidade do vetor
8 Respostas
Existe uma maneira que além de poder usar uma classe pronta do java você pode simplesmente passar os valores para um novo vetor, informar um novo valor para o vetor atual e depois pegar os valores do novo vetor para o antigo como eu tentei demonstrar no meu algoritmo abaixo.
//Desenvolvimento do Algoritmo
public class Vetor {
String[] elementos;
int tamanho;
//construtor força a informar o tamanho do vetor na aplicação
public Vetor(int capacidade) {
this.elementos = new String[capacidade];
this.tamanho = 0;
}
//método que será chamado pelo objeto na aplicação para adicionar
//caracteres
public void adicionar(String caracteres) {
aumentaCapacidade();//aqui eu chamei o meu método aumentar capacidade para ele verificar as condições que foram impostas se são atendidas ou não.
if (this.tamanho < this.elementos.length) {
this.elementos[this.tamanho] = caracteres;
this.tamanho++;
}
}
//método para fazer a troca de valores e introduzir o novo valor
//na posição indicada como mostra a assinatura do método
public void trocar(String caractere, int posicao) {
for (int i = this.tamanho; i >= 0; i--) {
String aux;
if (this.elementos[i] != null) {
aux = this.elementos[i];
this.elementos[i + 1] = aux;
if (i == posicao) {
this.elementos[i] = caractere;
break;
}
}
}
}
//aumenta a capacidade do vetor, copiando os valores existentes para um novo vetor,
//depois aumentando o tamanho do vetor anterior antes de devolver os valores
public void aumentaCapacidade() {
public void aumentaCapacidade() {
if (this.tamanho == this.elementos.length) {
String[] elementosNovos = new String[this.elementos.length * 2];
for (int i = 0; i < this.elementos.length; i++) {
elementosNovos[i] = this.elementos[i];
}
this.elementos = elementosNovos;
}
}
//exibe na aplicação o resultado
@Override
public String toString() {
for (int i = 0; i <= this.tamanho; i++) {
System.out.print("Posição :" + i);
System.out.print(" ");
System.out.println("Elemento :" + this.elementos[i]);
}
return "";
}
}
//Aplicação do algoritmo
public class Aplicacao {
public static void main(String[] args) {
Vetor vetor = new Vetor(9);
vetor.adicionar("b");
vetor.adicionar("c");
vetor.adicionar("d");
vetor.adicionar("e");
vetor.adicionar("f");
vetor.adicionar("g");
vetor.adicionar("h");
System.out.println(vetor.toString());
System.out.println("");
vetor.trocar("a", 0);
System.out.println(vetor.toString());
}
}
se houver outras maneiras gostaria que compartilhassem.
Não ficou claro a funcionalidade que precisa atender, mas no geral pode usar ArrayList.
o array.list ele ja utiliza uma classe pronta do java, o eu estava tentando fazer é verificar uma alternativa alem do array.list e se realmente não tinha como aumentar a capacidade do vetor como todos diziam, aí eu perguntei aos meus colegas e nós chegamos a esta conclusão, ao invés de tentar aumentar diretamente no tamanho do vetor.
por exemplo eu tenho vetor1[5] com valores preenchidos, mas eu quero aumentar mais 1 da capacidade, eu só preciso criar um novo vetor que podemos chamar de vetor2[vetor1.tamanho+1], na hora em que eu crio o vetor2 eu já indico que ele terá o mesmo tamanho que o vetor1 com o adicional de +1, fazendo isso eu aumentei a capacidade do vetor2, depois eu transfiro meus valores do vetor1 para o vetor2, logo na parte final eu faço o vetor1 receber o vetor2 com um novo tamanho, depois eu só chamo novamente no método adicionar.
public void aumentaCapacidade() {
if (this.tamanho == this.elementos.length) {
String[] elementosNovos = new String[this.elementos.length * 2];
for (int i = 0; i < this.elementos.length; i++) {
elementosNovos[i] = this.elementos[i];
}
this.elementos = elementosNovos;
}
}
public void adicionar(String caracteres) {
aumentaCapacidade();
if (this.tamanho < this.elementos.length) {
this.elementos[this.tamanho] = caracteres;
this.tamanho++;
}
}
Está criando um problema sem necessidade. Usa ArrayList.
a questão não é criar problemas sem necessidades, mas se em algum momento você precisar trabalhar com uma linguagem de programação diferente, em que você precise aprender do começo, lá provavelmente não terá o ArrayList, se tiver estará com um nome diferente, e é interessante tentar descobrir soluções alternativas sem depender muito das classes já pronta do java, principlamente quando se está vendo estrutura de dados em java, é mais para verificar o conceito do que aplicar realmente, se eu fosse escolher logicamente utilizaria o ArrayList, mas é bom as vezes sanar algumas dúvidas como eu propus no tópico.
Não é o caso da linguagem que está usando neste post. Quando realmente tiver um problema com outra linguagem, abre um post sobre o problema que está passando, pra resolver a funcionalidade com a outra linguagem.
bem, como eu disse, é para verificar soluções diferentes do ArrayList, e verificar se o método proposto pode se aplicado no java, é interessante utilizar a lógica para resolver determinados casos, e em casos mais complexos que necessitam de mas linhas de códigos, classes e métodos, é realmente recomendado utilizar as classes prontas no java, neste caso de verificar o aumento do vetor “na minha opinião pessoal” daria para resolver utilizando apenas um método dentro da classe chamando esse método na hora de adicionar novos elementos, e verificar se existem soluções melhores “Alem do ArrayList” para trazer uma solução.
Permita-me concordar com o @javaflex
Agora, se quer algo que funcione como vetor e possa ser expandido além do limite inicial, dá uma olhada em estruturas de dados e implementa sua própria fila ou lista ou pilha, de acordo com a necessidade e com a linguagem em questão.
É simples? Nem sempre.
É fácil de usar? Nem sempre.
É eficaz e atende ao que você quer? Sim.