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.
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 Integer
s.
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.