Listas
Prof. Me. Danilo Bueno
layout: image-right image: https://c.tenor.com/2xuuzQh8N1AAAAAC/tenor.gif
Listas
Listas estão por toda parte! Lista de compras, lista de tarefas, lista de contatos…
Na programação:
Listas (ou Arrays Dinâmicos) são estruturas de dados que permitem armazenar coleções de elementos de forma ordenada.
layout: image-right image: https://c.tenor.com/2xuuzQh8N1AAAAAC/tenor.gif
Por que são importantes em Web?
- Lista de produtos em um e-commerce
- Lista de usuários cadastrados
- Lista de posts em um blog
Websites dinâmicos vivem de listas de dados!
Conhecendo o ArrayList
A classe em Java que representa listas dinâmicas.
- Dinâmica: O tamanho da lista pode crescer ou diminuir conforme adicionamos ou removemos elementos.
- Armazena: Objetos! Em Java Web, frequentemente strings, números, objetos de classes que representam dados (ex:
Usuario,Produto). - Ordenada: A ordem em que você adiciona os elementos é mantida.
- Indexada: Cada elemento tem uma posição (índice), começando do 0.
Conhecendo o ArrayList
Exemplo de criação de uma lista vazia.
import java.util.ArrayList;
public class ExemploArrayList {
public static void main(String[] args) {
// Criando uma ArrayList de Strings
ArrayList<String> alunos = new ArrayList<>();
}
}
layout: image image: https://media.geeksforgeeks.org/wp-content/uploads/20240410101419/Getting-Started-with-Array-Data-Structure.webp backgroundSize: contain title: array ilustration
Adicionando Elementos
O método add() é usado para inserir um novo elemento ao final da lista.
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana"); // Adiciona "Ana" ao final
alunos.add("Bruno"); // Adiciona "Bruno" ao final
alunos.add("Carla"); // Adiciona "Carla" ao final
// Saída: [Ana, Bruno, Carla]
System.out.println("Lista de alunos: " + alunos);
Dica: Você também pode usar add(índice, elemento) para adicionar em uma posição específica (mas cuidado para não “pular” posições!).
Acessando Elementos
O método get(índice) retorna o elemento que está na posição especificada
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana"); alunos.add("Bruno"); alunos.add("Carla");
String a1 = alunos.get(0); //Pega o elemento no índice 0 (Ana)
String a2 = alunos.get(1); //Pega o elemento no índice 1 (Bruno)
System.out.println("Primeiro: " + a1); //Ana
System.out.println("Segundo: " + a2); //Bruno
// Erro: IndexOutOfBoundsException (índice 3 não existe)
// String alunoInexistente = alunos.get(3);
Editando Elementos
O método set(índice, novoElemento) substitui o elemento que está na posição índice pelo novoElemento.
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana");
alunos.add("Bruno");
alunos.add("Carlos"); // Erro de digitação, era Carla!
System.out.println("original:" + alunos); //[Ana, Bruno, Carlos]
alunos.set(2, "Carla"); // Edita elemento 2 (Carlos -> Carla)
System.out.println("editada:" + alunos); //[Ana, Bruno, Carla]
Removendo Elementos - parte 1
Operação remove(índice): Remove o elemento na posição índice. Os elementos após essa posição são “deslocados” para preencher o espaço.
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana") ;alunos.add("Bruno"); alunos.add("Carla");
System.out.println("original: " + alunos); //[Ana, Bruno, Carla]
alunos.remove(1); //Remove o elemento no índice 1 (Bruno)
System.out.println("final: " + alunos); //[Ana, Carla]
Importante: Remover elementos altera os índices dos elementos seguintes! Tenha cuidado ao remover em loops com base em índices.
Removendo Elementos - parte 2
Operação remove(objeto): Remove a primeira ocorrência do objeto na lista. Retorna true se removeu, false se o objeto não estava na lista.
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana"); alunos.add("Bruno"); alunos.add("Carla");
System.out.println("original: " + alunos); //[Ana, Bruno, Carla]
alunos.remove("Carla");//Remove a primeira ocorrência de "Carla"
System.out.println("final: " + alunos); //[Ana, Bruno]
Deletando a Lista
O método clear() remove todos os elementos da lista, deixando-a vazia.
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana"); alunos.add("Bruno"); alunos.add("Carla");
System.out.println("original: " + alunos); //[Ana, Bruno, Carla]
alunos.clear(); // Remove todos os elementos
System.out.println("final: " + alunos); //[] (lista vazia)
System.out.println("tamanho: " + alunos.size()); //tamanho: 0
Percorrendo a Lista
Formas de Percorrer:
-
Loop
fortradicional (com índice):- Útil quando você precisa do índice do elemento.
-
Loop
for-each(aprimorado):- Mais simples e legível para apenas acessar os elementos, sem precisar do índice.
Percorrendo a Lista - forma 1
Utilizando o for tradicional
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana"); alunos.add("Bruno"); alunos.add("Carla");
// Loop do índice 0 até o tamanho da lista - 1
for (int i = 0; i < alunos.size(); i++) {
String aluno = alunos.get(i); // Pega o aluno no índice i
System.out.println("Aluno na posição " + i + ": " + aluno);
}
Importante: perceba a utilização do alunos.size() para retornar o tamanho da lista
Percorrendo a Lista - forma 2
Utilizando o for-each: o for “aprimorado”
ArrayList<String> alunos = new ArrayList<>();
alunos.add("Ana"); alunos.add("Bruno"); alunos.add("Carla");
// Para cada "aluno" DENTRO da lista "alunos"
for (String aluno : alunos) {
System.out.println("Aluno: " + aluno);
}
- Mais curto e fácil de ler, percorre cada elemento da lista automaticamente.
- Ideal quando você só precisa acessar os elementos, sem se preocupar com o índice.
Listas na Web
Imagine um sistema web simples de lista de tarefas.
- Você pode usar um
ArrayList<String>para armazenar as tarefas na memória - Quando um usuário adiciona uma tarefa, você usa
add(). - Para exibir as tarefas na tela, você percorre a lista com um loop
for-each. - Para marcar uma tarefa como “concluída”, você pode usar
remove()(talvez buscando pelo índice ou pelo texto da tarefa).
Exemplo de lista com Spring Boot
1 - Criando a lista na classe controladora
@Controller
public class ProductController {
public List<Product> products = new ArrayList<Product>();
ProductController() {
products.add(new Product("Notebook", 3500.00));
products.add(new Product("Smartphone", 1500.00));
}
}
Importante: A lista é um atributo da classe; A utilização do construtor;
Exemplo de lista com Spring Boot
2 - Enviando a lista para a visão com o Model
@Controller
public class ProductController {
public List<Product> products = new ArrayList<Product>();
@GetMapping("/products")
public String index(Model model) {
model.addAttribute("products", products);
return "list";
}
}
Exemplo de lista com Spring Boot
Percorrendo a lista com a diretiva th:each do Thymeleaf
<table>
<tr>
<th>Name</th>
<th>Description</th>
<th>Price</th>
</tr>
<tr th:each="product : ${products}">
<td th:text="${product.name}"></td>
<td th:text="${product.description}"></td>
<td th:text="${product.price}"></td>
</tr>
</table>
Recapitulando:
- Listas (
ArrayList) são essenciais para organizar dados em Java Web. - Aprendemos as operações básicas:
add(),get(),set(),remove(),clear(). - Sabemos como percorrer listas com loops
forefor-each. - Vimos um exemplo simples de como listas podem ser usadas em aplicações web.