> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud6-solucions/list-e-arraylist.md).

# List e ArrayList

1. Tarefas

```java
import java.util.ArrayList;
import java.util.List;

public class XestorTarefas {
    private List<String> tarefas;

    // Construtor: crea o xestor sen ningunha tarefa
    public XestorTarefas() {
        this.tarefas = new ArrayList<>();
    }

    // Engadir en última posición
    public void engadir(String tarefa) {
        tarefas.add(tarefa);
    }

    // Sobrecarga: engadir nunha posición específica
    public void engadir(String tarefa, int posicion) {
        if (posicion < 0 && posicion >= tarefas.size())
            throw new IndexOutOfBoundsException(posicion);
        tarefas.add(posicion, tarefa);
    }

    // Sobrecarga: engadir outra lista de tarefas
    public void engadir(List<String> outrasTarefas) {
        tarefas.addAll(outrasTarefas);
    }

    // Recuperar tarefa nunha posición sen eliminala
    public String recuperar(int posicion) {
        if (posicion < 0 && posicion >= tarefas.size())
            throw new IndexOutOfBoundsException(posicion);
        return tarefas.get(posicion);
    }

    // Comprobar se contén a tarefa
    public boolean conten(String tarefa) {
        return tarefas.contains(tarefa);
    }

    // Obter o índice dunha tarefa
    public int indice(String tarefa) {
        return tarefas.indexOf(tarefa);
    }

    // Obter o tamaño da lista
    public int tamano() {
        return tarefas.size();
    }

    // Eliminar tarefa por posición (devolve a tarefa eliminada)
    public String eliminar(int posicion) {
        if (posicion < 0 && posicion >= tarefas.size())
            throw new IndexOutOfBoundsException(posicion);
        return tarefas.get(posicion);
    }

    // Eliminar tarefa por nome (devolve true se existía)
    public boolean eliminar(String tarefa) {
        return tarefas.remove(tarefa);
    }

    @Override
    public String toString() {
        return "XestorTarefas: " + tarefas.toString();
    }
}
```

```java
import java.util.ArrayList;
import java.util.List;

public class App {
    public static void main(String[] args) {
        // 1. Crea un XestorDeTarefas
        XestorTarefas xestor = new XestorTarefas();

        // 2. Engadir en última posición
        xestor.engadir("Traballo de Sostenibilidade");
        xestor.engadir("Estudiar Programación");
        xestor.engadir("Actualizar a versión de Java");

        // 3. Engadir en posicións específicas
        xestor.engadir("Pagar premiun ChatGPT", 0);
        xestor.engadir("Facer unha copia de seguridade da BD", 2);

        // 4. Mostra por pantalla os datos do xestor
        System.out.println("--- Estado inicial ---");
        System.out.println(xestor);

        // 5. Crea unha nova lista e engádea
        List<String> novaLista = new ArrayList<>();
        novaLista.add("Ir ao super");
        novaLista.add("Ir a peixería");
        xestor.engadir(novaLista);

        System.out.println("\n--- Tras engadir a nova lista ---");
        System.out.println(xestor);

        // 6. Recupera sen eliminar a tarefa da posición 3
        System.out.println("\nTarefa na posición 3: " + xestor.recuperar(3));

        // 7. Recupera eliminando a tarefa da posición 3
        String eliminada = xestor.eliminar(3);
        System.out.println("Eliminada tarefa: " + eliminada);
        System.out.println("Estado do xestor: " + xestor);

        // 8. Recupera a posición da tarefa "Estudiar Programación"
        int pos = xestor.indice("Estudiar Programación");
        System.out.println("\nPosición de 'Estudiar Programación': " + pos);

        // 9. Recupera o número de elementos
        System.out.println("Número total de tarefas: " + xestor.tamano());
    }
}

```

2. Xogos

```java
package Listas.videoxogos;

import java.util.Objects;

public abstract class Xogo {
    private String titulo;
    private double prezo;
    private int stock;

    public Xogo(String titulo, double prezo) {
        this.titulo = titulo;
        this.prezo = prezo;
        this.stock = 0;
    }

    // Getters e Setters
    public String getTitulo() { return titulo; }
    public void setTitulo(String titulo) { this.titulo = titulo; }
    public double getPrezo() { return prezo; }
    public void setPrezo(double prezo) { this.prezo = prezo; }
    public int getStock() { return stock; }
    public void setStock(int stock) { this.stock = stock; }

    public abstract void xogar();

    @Override
    public String toString() {
        return "Título: " + titulo + " | Prezo: " + prezo + "€ | Stock: " + stock;
    }

    @Override
    public boolean equals(Object o) {
        if (o instanceof Xogo)
            return true;
        Xogo xogo = (Xogo) o;
        return Objects.equals(titulo, xogo.titulo);
    }
}

```

```java
package Listas.videoxogos;

import java.util.Objects;

public class Videoxogo extends Xogo {

    private Plataforma plataforma;

    public Videoxogo(String titulo, double prezo, Plataforma plataforma) {
        super(titulo, prezo);
        this.plataforma = plataforma;
    }

    public Plataforma getPlataforma() {
        return plataforma;
    }

    public void setPlataforma(Plataforma plataforma) {
        this.plataforma = plataforma;
    }

    @Override
    public void xogar() {
        System.out.println("Xogando a " + getTitulo() + " na " + plataforma + ".");
    }

    @Override
    public String toString() {
        return "Videoxogo {" +  super.toString() + " | Plataforma: " + plataforma + "}";
    }

    @Override
    public boolean equals(Object o) {
        if (!super.equals(o)) return false;
        if (!(o instanceof Videoxogo))
            return false;
        Videoxogo that = (Videoxogo) o;
        return Objects.equals(plataforma, that.plataforma);
    }
}

```

```java
package Listas.videoxogos;

public enum Plataforma {
    PC,
    PS5,
    XBOX
}
```

```java
package Listas.videoxogos;

public class XogoDeMesa extends Xogo {
    private int numXogadores;

    public XogoDeMesa(String titulo, double prezo, int numXogadores) {
        super(titulo, prezo);
        this.numXogadores = numXogadores;
    }

    public int getNumXogadores() { return numXogadores; }
    public void setNumXogadores(int numXogadores) { this.numXogadores = numXogadores; }

    @Override
    public void xogar() {
        System.out.println("Preparando o taboleiro para unha partida de " + getTitulo() + " ata " + numXogadores + " xogadores.");
    }

    @Override
    public String toString() {
        return "XogoDeMesa{" + super.toString() + " | Máx. Xogadores: " + numXogadores + "}";
    }

    @Override
    public boolean equals(Object o) {
        if (!super.equals(o))
            return false;
        if (!(o instanceof XogoDeMesa))
            return false;
        XogoDeMesa that = (XogoDeMesa) o;
        return numXogadores == that.numXogadores;
    }
}

```

```java
package Listas.videoxogos;
 // Importamos a túa clase Lista

import Listas.Lista;

import java.util.ArrayList;
import java.util.List;

public class Tenda {

    private String nome;
    private List<Xogo> listadoXogos;

    public Tenda(String nome) {
        this.nome = nome;
        this.listadoXogos = new ArrayList<>();
    }

    public String getNome() { return nome; }
    public void setNome(String nome) { this.nome = nome; }

    public int indiceXogo(String nomeXogo) {
        for (int i = 0; i < listadoXogos.size(); i++) {
            if (listadoXogos.get(i).getTitulo().equalsIgnoreCase(nomeXogo)) {
                return i;
            }
        }
        return -1;
    }

    public Xogo recuperarXogo(int pos) {
        return listadoXogos.get(pos);
    }

    public void engadirXogo(Xogo novoXogo) {
        int index = indiceXogo(novoXogo.getTitulo());

        if (index == -1) {
            listadoXogos.add(novoXogo);
        } else {
            Xogo existente = listadoXogos.get(index);
            existente.setStock(existente.getStock() + novoXogo.getStock());
        }
    }

    public void eliminarXogo(Xogo x) {
        listadoXogos.remove(x);
    }

    @Override
    public String toString() {
        return "TENDA: " + nome + "\nCatálogo:\n" + listadoXogos.toString();
    }
}
```

```java
package Listas.videoxogos;

public class App {
    public static void main(String[] args) {
    
        Videoxogo v1 = new Videoxogo("Elden Ring", 60.0, Plataforma.PS5);
        v1.setStock(10);
        Videoxogo v2 = new Videoxogo("Halo", 50.0, Plataforma.XBOX);
        v2.setStock(5);

        XogoDeMesa m1 = new XogoDeMesa("Catan", 45.0, 4);
        m1.setStock(8);
        XogoDeMesa m2 = new XogoDeMesa("Carcassonne", 35.0, 5);
        m2.setStock(12);

        
        Tenda miñaTenda = new Tenda("Gamer Zone");
        miñaTenda.engadirXogo(v1);
        miñaTenda.engadirXogo(v2);
        miñaTenda.engadirXogo(m1);
        miñaTenda.engadirXogo(m2);

        
        System.out.println(miñaTenda);

        Videoxogo v3 = new Videoxogo("Elden Ring", 60.0, Plataforma.PS5);
        v3.setStock(5); // Engadimos 5 unidades máis
        miñaTenda.engadirXogo(v3);

       
        System.out.println("\n--- Despois de engadir stock de Elden Ring ---");
        System.out.println(miñaTenda);

     
        int pos = miñaTenda.indiceXogo("Catan");
        Xogo recuperado = miñaTenda.recuperarXogo(pos);
        System.out.println("\nRecuperado: " + recuperado);

    
        miñaTenda.eliminarXogo(recuperado);
        System.out.println("\n--- Despois de eliminar Catan ---");
        System.out.println(miñaTenda);
    }
}

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud6-solucions/list-e-arraylist.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
