Definição de Lista Sequencial
Uma lista sequencial é uma estrutura linear que armazena elementos em endereços físicos contíguos, geralmente utilizando arrays. Suas operações básicas incluem inserção, remoção, busca e modificação de elementos.
Implementação Personalizada
Interface da Lista
public interface ListaSequencial {
void adicionar(int valor);
void adicionar(int indice, int valor);
boolean contem(int alvo);
int buscarIndice(int alvo);
int obter(int indice);
void atualizar(int indice, int valor);
void remover(int valor);
int tamanho();
void limpar();
void exibir();
}
Classe de Implementação
public class MinhaLista implements ListaSequencial {
private int[] elementos;
private int tamanhoAtual;
private int capacidade;
public MinhaLista() {
capacidade = 8;
elementos = new int[capacidade];
}
private void expandir() {
capacidade *= 2;
elementos = Arrays.copyOf(elementos, capacidade);
}
private boolean estaCheia() {
return tamanhoAtual == capacidade;
}
public void adicionar(int valor) {
if (estaCheia()) expandir();
elementos[tamanhoAtual++] = valor;
}
public void adicionar(int indice, int valor) {
if (indice < 0 || indice > tamanhoAtual) return;
if (estaCheia()) expandir();
for (int i = tamanhoAtual; i > indice; i--) {
elementos[i] = elementos[i-1];
}
elementos[indice] = valor;
tamanhoAtual++;
}
public boolean contem(int alvo) {
for (int i = 0; i < tamanhoAtual; i++) {
if (elementos[i] == alvo) return true;
}
return false;
}
public int buscarIndice(int alvo) {
for (int i = 0; i < tamanhoAtual; i++) {
if (elementos[i] == alvo) return i;
}
return -1;
}
public int obter(int indice) {
if (indice < 0 || indice >= tamanhoAtual) return -1;
return elementos[indice];
}
public void atualizar(int indice, int valor) {
if (indice < 0 || indice >= tamanhoAtual) return;
elementos[indice] = valor;
}
public void remover(int valor) {
int pos = buscarIndice(valor);
if (pos == -1) return;
for (int j = pos; j < tamanhoAtual - 1; j++) {
elementos[j] = elementos[j+1];
}
tamanhoAtual--;
}
public int tamanho() {
return tamanhoAtual;
}
public void limpar() {
tamanhoAtual = 0;
}
public void exibir() {
for (int i = 0; i < tamanhoAtual; i++) {
System.out.print(elementos[i] + " ");
}
System.out.println();
}
}
ArrayList Padrão do Java
No framwork Collections, ArrayList é uma implemnetação da interface List com estas características:
- Implementado com generics
- Suporte a acesso aleatório (RandomAccess)
- Clonável (Cloneable) e serializável (Serializable)
- Não é thread-safe (para concorrência use Vector ou CopyOnWriteArrayList)
- Armazenamento contíguo com redimensionamento dinâmico
Utilização do ArrayList
Construtores
List<String> lista1 = new ArrayList<>(); // Lista vazia
List<Integer> lista2 = new ArrayList<>(15); // Capacidade inicial 15
List<Double> lista3 = new ArrayList<>(lista2); // Cópia de coleção
Operações Principais
ArrayList<Integer> numeros = new ArrayList<>();
numeros.add(15); // Inserção no final
numeros.add(0, 20); // Inserção por índice
numeros.get(0); // Recuperar elemento
numeros.set(0, 100); // Atualizar elemento
numeros.remove(0); // Remover por índice
numeros.remove(Integer.valueOf(15)); // Remover por valor
numeros.contains(30); // Verificar existência
numeros.indexOf(20); // Buscar posição
numeros.clear(); // Limpar lista
Métodos de Iteração
Via índice:
for (int i = 0; i < numeros.size(); i++) {
System.out.print(numeros.get(i));
}
For-each:
for (int n : numeros) {
System.out.print(n);
}
Iterador:
Iterator<Integer> it = numeros.iterator();
while (it.hasNext()) {
System.out.print(it.next());
}