Fazer Array com tamanho alocado dinamicamente igual ArrayList, mas, sem utilizar ArrayList?

Como fazer um Array sem tamanho definido, sem usar ArrayList. Cada vez que chamar método adiciona uma nota:

public void adcionarNotas(double nota) 
{
}
1 curtida

Acredito que algo assim não seja possível

Double[] notas = new Double[];

Tem como criar objetos dinamicamente usando reflection, mas duvido que você precise disso, você realmente será obrigada a usar listas…

Simples, faça um método que cria uma arraylist com os valores que a matriz já possuí (usando o loop for para adicionar os itens) e adicionar o novo item. Use este código:

public static void main(String[] args) {
String[] array = {"banana", "maçã"};
array = adiciona(array, "Uva");
}

public String[] adiciona(String[] array, String fruta) {
    List<String> list= new ArrayList<String>();
    for(int i = 0; i < array.length; i++) {
        list.add(array[i]);
    ]
    list.add(fruta);
    String[] suaMatriz = new String[list.size()];
    suaMatriz = list.toArray(suaMatriz );
    return suaMatriz;
}

Substitua os valores e tipos por os de seu interesse.

Ele pediu justamente para fazer SEM utilizar ArrayList.

Então, em Java arrays não possuem tamanho dinâmico, quando você instância um array é necessário informar o seu tamanho.

Se isso é um trabalho de estrutura de dados, procure exemplos de como implementar manualmente uma estrutura do tipo lista.

1 curtida

Não ficou muito claro, pode ser que não. Na minha interpretação ele pediu para não utilizar uma ArrayList ao invés de uma matriz, e isso não acontece. Portanto minha resposta continua válida.

É só fugir dos ponteiros.

package legals;
import java.util.Arrays;

public class Legals {

    public static void main(String[] args) {
        String[] vetor = {"A","B","C","D"};
        vetor = array(vetor, "E");
        System.out.println(Arrays.toString(vetor));
    }
    
    private static String[] array(String[] vetor, String adicionarString){
        String[] retorno = new String[vetor.length +1];//
        System.arraycopy(vetor, 0, retorno, 0, vetor.length);
        retorno[vetor.length] = adicionarString;
        return retorno;
    }  
}
2 curtidas

Realmente, o seu código faz o mesmo que o meu mas de uma forma mais limpa. Eu não conhecia esse método System.arraycopy(). Vivendo e aprendendo. :smile:

Tem mais na cartola, olha ai.

package crisis;
import java.util.ArrayList;
import java.util.Arrays;

public class Crisis {
    
    public static void main(String[] args) {
        String[] array = {"nanana", "naça"};
        Arrays.asList(simplicit(new ArrayList<>(), array, "Uva")).forEach(System.out::println);
    }
    
    private static String[] simplicit(ArrayList<String> list, String[] vetor, String addString) {
        list.addAll(Arrays.asList(vetor));
        list.add(addString);
        return list.toArray(new String[list.size()]);
    }    
}