> 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-exercicios/mapas-map-e-hashmap.md).

# Mapas: Map e HashMap

1. Escribe un programa que lea un ficheiro de texto como o que se indica a continuación, e mostre por pantalla as palabras diferentes que aparecen no texto orixinal, indicando cantas veces se repite cada palabra. Emprega unha **estructura Map** para implementar a resolución do exercicio.

{% hint style="warning" %}
O método **replaceAll("\[^0-9A-Za-záéíóúÁÉÍÓÚÑñ]", "")** da clase String elimina calquera carácter que non estea incluido na expresión regular
{% endhint %}

Exemplo de ficheiro de entrada:

```
¿Qué es Lorem Ipsum?
Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto.
Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el siglo XVI,
cuando un impresor (anónimo) usó una galera de tipos y los mezcló para crear un libro 
de muestras tipográficas. Ha sobrevivido no solo cinco siglos, sino también la 
transición a la composición tipográfica electrónica, manteniéndose prácticamente 
inalterado. Se popularizó en la década de 1960 con la publicación de las hojas 
Letraset que contenían pasajes de Lorem Ipsum y, más recientemente, con software 
de autoedición como Aldus PageMaker, que incluía versiones de Lorem Ipsum.
```

Exemplo de saída por pantalla:

```
imprentas : 1
de : 12
prácticamente : 1
con : 2
software : 1
anónimo : 1
XVI : 1
industrias : 1
popularizó : 1
galera : 1
cinco : 1
siglo : 1
autoedición : 1
Aldus : 1
tipográfica : 1
archivos : 1
usó : 1
sobrevivido : 1
relleno : 2
un : 2
Ha : 1
Ipsum : 5
las : 3
composición : 1
como : 1
libro : 1
sino : 1
contenían : 1
desde : 1
manteniéndose : 1
Qué : 1
el : 3
versiones : 1
en : 1
tipográficas : 1
tipos : 1
Letraset : 1
es : 2
crear : 1
transición : 1
impresor : 1
mezcló : 1
que : 2
no : 1
década : 1
estándar : 1
también : 1
inalterado : 1
PageMaker : 1
electrónica : 1
los : 1
sido : 1
para : 1
hojas : 1
más : 1
a : 1
cuando : 1
recientemente : 1
una : 1
solo : 1
siglos : 1
publicación : 1
texto : 3
Se : 1
incluía : 1
Lorem : 5
la : 4
1960 : 1
simplemente : 1
y : 3
ha : 1
muestras : 1
pasajes : 1
```

2. Implementa clases para o seguinte modelo de datos que permite simular a escolla de delegado nunha aula.
   1. Implementa unha clase Alumno, que consta de DNI e nome. A clase consta de constructor, métodos getters e setters e un método toString(), equals() e hashcode().
   2. Implementa unha clase Urna, que vai a conter a seguinte información.

      1. A colección de Alumnos que xa votaron delegado
      2. Unha estructura co resultado da votación, que conten, para cada alumno que fose votado por outo, o numero de votos totales que recibiu. Se un alumno non foi votado por ninguen, non debe aparecer na colección resultado
      3. Un constructor no que se van a inicializar a colección de alumnos e o resultado. Emprega as clases estándar de Java como tipo de dato.
      4. Un método votar (Alumno candidato, Alumno votante) que devolve un booleano. O método debe de:
         1. Verificar se o alumno votante xa votou, se foi asi, devolve false. Se non hai que incluir o votante na coleción de votantes que votaron
         2. Se o alumno non votou, debe de verificar se o candidato xa esta incluido na lista de resultados:
            1. Se non o está, hai que engadilo con un voto
            2. Se si que o está, hai que recuperar o numero de votos e sumarlle un
            3. En calqueira dos casos, a función debe de devolver certo
      5. &#x20;Un método recuperarVotos(Alumno candidato), que devolve o numero de votos que recibiu o alumno. Se o candidato no esta incluido na lista de resultados, debe de devolver 0
      6. Un método toString(), que vai a devolver os datos da votacion no seguinte formato:
         1. Votantes: \[ Pepito Pérez - 12345678L, ... , Anita López - 87654321Q]&#x20;
         2. Candidatos\[ Juanita Álvarez: 7, Pepito Perez: 12, ...]

      **No método toString() debes de recorrer as estructuras de maneira manual.**&#x20;
   3. Implementa unha clase App que faga o seguinte:&#x20;
      1. Crea unha urna
      2. Crea os seguintes alumnos e as súas votacions seguindo o exemplo que se expón o final da páxina
      3. Fai que Ana se volva a votar a si mesma, ¿que ocorre?
      4. Recupera os votos de Daniel e de Elena (non foi votada). ¿Que devolve?
      5. Crea un alumno a7 cos datos de Ana.&#x20;
         1. Intenta recuperar os votos recibidos por Ana
         2. Fai que Ana se vote a si mesma
      6. Mostra os datos da urna e explica o resultado de que votos e resultados foron anulados e recuperados
   4. Comenta os métodos equals e hashcode da clase Alumno. Volve a executar o código. Explica que ocorreu.

```java
        // Crear 6 alumnos
        Alumno a1 = new Alumno("111A", "Ana");
        Alumno a2 = new Alumno("222B", "Braiz");
        Alumno a3 = new Alumno("333C", "Carla");
        Alumno a4 = new Alumno("444D", "Daniel");
        Alumno a5 = new Alumno("555E", "Elena");
        Alumno a6 = new Alumno("666F", "Fernando");

        // Simulación de votos
        urna.votar(a1, a2); // Brais vota por Ana
        urna.votar(a1, a3); // Carla vota por Ana
        urna.votar(a2, a1); // Ana vota por Brais
        urna.votar(a4, a5); // Elena vota por Daniel
        urna.votar(a4, a6); // Fernando vota por Daniel
        urna.votar(a4, a4); // Daniel vótase a si mesmo
```


---

# 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-exercicios/mapas-map-e-hashmap.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.
