> 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/ud6-estructuras-de-datos-avanzadas/page-2/mapas-ou-diccionarios.md).

# Mapas ou diccionarios

Un **Mapa** (tamén coñecido como **Diccionario** ou Array Asociativo) é unha estrutura de datos que **garda elementos en parellas chave e valor (Key ⇒ Value)**. A diferenza das listas, onde accedemos aos elementos por un índice numérico, nos mapas utilizamos unha chave única para recuperar un valor asociado.&#x20;

<figure><img src="/files/1pPCrXWcCtN7yYF6Rs08" alt=""><figcaption></figcaption></figure>

As principais características dos mapas son:

* **Chaves únicas:** Non se permiten chaves duplicadas. Se intentas inserir unha chave que xa existe, o mapa sobrescribe o valor anterior co novo. Os valores, pola contra, si poden repetirse.
* **Acceso directo:** Permiten recuperar un valor de forma inmediata se coñecemos a súa chave, sen necesidade de percorrer toda a colección.

{% hint style="warning" %}
Para realizar acceso directo, empregan unha **función hash**, que transforma a clave nun índice numérico interno, permitindo localizar o valor asociado en tempo constante.
{% endhint %}

* **Independencia de orde:** Do mesmo xeito que os conxuntos, a maioría dos mapas non garanten unha orde específica (salvo versións concretas), xa que o importante é a relación entre a chave e o valor.
* **Flexibilidade de tipos:** As chaves poden ser de calquera tipo (Strings, Integers, obxectos personalizados), o que permite organizar a información de xeito moito máis semántico que cun simple índice.
* As **operacións principais** que empregan son as seguintes:&#x20;
  * **Put (Inserir):** Engade unha nova parella chave-valor ou actualiza unha existente.
  * **Get (Recuperar):** Devolve o valor asociado a unha chave específica.
  * **ContainsKey:** Determina de forma moi eficiente se unha chave existe no mapa.
  * **Remove (Eliminar):** Elimina do mapa de forma completa o par clave-valor.
  * **KeySet / Values:** Permite extraer por separado o conxunto de todas as chaves ou a colección de todos os valores.

{% embed url="<https://codepen.io/Iago-Magide-Rey/pen/ZYBzQvo>" %}

## Variantes de implementación

Dependendo de como se xestionen internamente as chaves e a súa orde, existen tres variantes principais:

* **HashMap:** A implementación máis eficiente e utilizada. Basease nunha táboa hash e ofrece un rendemento constante para as operacións básicas. Non garante ningunha orde.
* **LinkedHashMap:** Funciona como un HashMap pero mantén unha lista dobremente enlazada, o que permite iterar polos elementos na orde exacta na que foron inseridos.
* **TreeMap:** Garda as chaves seguindo a súa orde natural ou un criterio de ordenación personalizado. Internamente utiliza unha estrutura de árbore, o que o fai un pouco máis lento pero ideal se necesitas os datos sempre ordenados.

## Exemplos de uso

Os mapas son a estrutura ideal para modelar relacións de correspondencia ou bases de datos en memoria:

* **Configuración de aplicacións:** Onde cada parámetro ten un nome único (chave) e un valor asociado. (Ficheiros tipo properties).&#x20;

```
app.name=MiAplicacion
app.version=1.0
db.url=jdbc:mysql://localhost:3306/miBD
db.user=root
db.password=1234
```

* **Caché de datos:** Gardar resultados de operacións pesadas usando os parámetros de entrada como chave para non ter que repetir o cálculo.
* **Tradutores ou dicionarios:** Onde a palabra en galego é a chave e a súa tradución noutra lingua é o valor.
* **Contadores de frecuencia**: Por exemplo, para contar cantas veces aparece cada palabra nun libro (`"casa" -> 15`, `"can" -> 4`).


---

# 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, and the optional `goal` query parameter:

```
GET https://educacion.gitbook.io/programacion/ud6-estructuras-de-datos-avanzadas/page-2/mapas-ou-diccionarios.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
