Como implementar ArrayList manualmene?

Preciso implementar uma Arraylist em java manualmente e não consigo, será que tem alguém que poderia me ajudar?
Eu não posso usar a classe ArrayList que já vem pronta, eu tenho que criar a minha própria.

Então…,veja bem, eu poderia até ver um horario livre aqui e fazer isso pra você, mas para o seu bem profissional não farei.Tenta, sei que será dificil, chato pacas e que duvidas aparecerão. Mas no final você verá que terá valido a pena. Nas duvidas especificas que tiver sobre a implementação, posta aqui e alguem de boa vontade poderá te ajudar.

Mas vou te dar uma dica : Cria uma Object[] e veja como faze-lo pra adicionar, deletar e setar; depois cria os metodos.

na main, eu estou usando uma String[]. O meu problema é montar as lógicas de algumas classes.

Rafael, você esta começando a casa do telhado. E tambem a ArrayList, aceita todo tipo de object. Entao esqueça implementar atraves do String[], usa conforme a minha dica a Object[]. E’ o alicerce pra essa sua implementação.

Então se eu usar o Object, eu consigo colocar valores em String dentro? (sou leigo ainda nessa parte)

J-menezes, eu consegui implementar o método boolean add do ArrayList aqui usando o object. Obrigado pela dica ai. Conforme for aparecendo mais dúvidas, neste mesmo tópico, eu continuo a perguntar.

Algumas dicas:

  • Usa Generics:
  • Você vai ter um problema nessa parte, porque vai ter que usar um array e não tem como instanciar um array de um tipo genérico. Muita gente considera isso uma falha no design da linguagem. Eu não sei o que pensar. De qualquer forma, existem maneiras de fazer isso, “workarounds”. Um deles é criar um array de Object e fazer cast para o tipo genérico (exemplo lá embaixo)
  • Crie um array interno e aumente/diminua seu tamanho conforme necessário. Se você ficar aumentando e diminuindo a cada inserção/remoção, a implementação vai ficar bem lenta. Você precisa criar uma “política de expansão”, uma lógica para aumentar o array toda vez que não couber mais elementos. Uma bem simples é dobrar o tamanho do array toda vez que ele encher.
  • Mantenha uma variável dizendo qual o tamanho da sua lista, e atualize-a toda vez que alguém inserir ou remover um elemento dela. O tamanho do array pode ser diferente do tamanho da lista (ex: o tamanho do array é 50 e você tem 37 elmentos inseridos). Essa variável vai te ajudar também a saber se um acesso é válido. Por exemplo se o índice passado para você é 13, seu array tem tamanho 20 mas o tamanho da lista é 10, esse acesso é inválido.

public class Main {
    public static void main(String[] args) {
        List<Integer> meuArrayList = new MeuArrayList<>();
    }
}

class MeuArrayList<E> implements List<E> {
    private E[] elements;
    MeuArrayList() {
        elements = (E[]) new Object[1]; // cria com um tamanho arbitrário e vai aumentando. Se não me engano, o default da ArrayList é 10
    }
    // imeplementacao de todos os metodos de List
}

o que seria esse Integer? O que ele quer dizer?

É só um exemplo. Todas as collections do Java utilizam generic types. Você pode especificar o que você quer guardar dentro da lista e não precisa ficar fazendo cast. Nesse caso, eu especifiquei que essa é uma lista de Integers.

Entendi… Eu havia feito dessa forma aqui, antes de ler a explicação sobre os genéricos:

Dessa forma estaria certo?

quando vc chama o add() do ArrayList, vc só passa o objeto que quer adicionar e não o novo array. No meu entendimento, toda vez que vc adicionar um objeto novo add(“blabla”) , dentro do seu add, vc vai ter que criar outro array, com um tamanho anterior + 1 e retornar o array novo

Parece que o que vc precisa fazer é implementar a estrutura de dados de lista e, para isso, pesquise por algoritmos de lista que você conseguirá fazer. Porém, se não for isso, e realmente vc precisa criar seu próprio ArrayList, você pode criar uma classe qualquer e implementar a interface java.util.List, e implementar seus métodos.