Sobre como aumentar a capacidade do vetor

8 respostas
java
T

Realmente é impossível aumentar a capacidade de um vetor depois que você declara o valor, mas existem maneiras de contornar isso.

8 Respostas

T

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.

J

Não ficou claro a funcionalidade que precisa atender, mas no geral pode usar ArrayList.

T

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++;
    }
}
J

Está criando um problema sem necessidade. Usa ArrayList.

T

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.

J

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.

T

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.

D

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.

Criado 9 de fevereiro de 2019
Ultima resposta 11 de fev. de 2019
Respostas 8
Participantes 3