Lista Usando Arrays

Neste lab vamos ver a interface Lista.

Uma lista é uma coleção de elementos indexados, com índices variando de 0 até o tamanho da lista menos 1.

Uma lista com 3 elementos tem os índices 0, 1 e 2.

Em Java temos a interface List com uma infinidade de métodos a serem implementados.

Neste laboratório vamos implementar apenas alguns:

Interface

Fornecida a seguinte interface:

public interface Lista{
	
	boolean isEmpty();
	int size();
	
	int get(int i);
	void set(int index, int element);
	
	void pushUltimo(int e);
	void pushPrimeiro(int e);
	int popUltimo();
	int popPrimeiro();
	
	void insert(int index, int element);
	void removeAt(int index);
	boolean removeElement(int element);
	boolean contains(int element);
}

Você deve fazer a implementação desta coleção, que deve ter as seguintes funcionalidade:

Dica Lembre de reutilizar métodos redundates. Como popPrimeiro() pode apenas utilizar o removeAt(0)
Dica2 Você pode criar métodos para auxiliar outros métodos, por exemplo, um método int indexOf(int element) que retorna o índice de certo elemento, e -1 caso o elemento não esteja presente, pode ajudar nos métodos contains e removeElement.

Teste

Use o seguinte teste e compare com a saída:

Saída

Testando Lista Array:
size: 0
isEmpty? true
ListaArray[] 
push ultimo 1 2 3
size: 3
isEmpty? false
ListaArray[1, 2, 3, ] 
push primeiro 4 5 6
ListaArray[6, 5, 4, 1, 2, 3, ] 
pop ultimo: 3
pop primeiro: 6
ListaArray[5, 4, 1, 2, ] 
qual elemento esta na posicao 1? 4
Colocando o 10 naposicao 1
ListaArray[5, 10, 1, 2, ] 
inserindo o 20 na posicao 1
ListaArray[5, 20, 10, 1, 2, ] 
lista contem o 30? false
lista contem o 20? true
removendo o 20: true
lista contem o 20? false
removendo o 20: false
lista contem o 20? false
ListaArray[5, 10, 1, 2, ] 
removendo o elemento na posicao 1
ListaArray[5, 1, 2, ] 

Respostas

[Desafio Opcional] Implementando Iterable

Ampliando o desafio, você pode implementar a interface Iterable, é a interface que possibilita usar o for-each para iterar na sua coleção.

for(var e: lista)
	sout(e);

Observe que certas coleções, como conjuntos, maps e árvores, não iteram de outra maneira a não ser pelo iterador.

[Bônus] Interface com Iterable

Adicione o extends Iterable<Integer> para dizer que a sua Lista é iterável

public interface Lista extends Iterable<Integer>{
	
	boolean isEmpty();
	int size();
	
	int get(int i);
	void set(int index, int element);
	
	void pushUltimo(int e);
	void pushPrimeiro(int e);
	int popUltimo();
	int popPrimeiro();
	
	void insert(int index, int element);
	void removeAt(int index);
	boolean removeElement(int element);
	boolean contains(int element);
}

Respostas