> 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/conxuntos.md).

# Conxuntos

Un **Conxunto** é unha estrutura de datos que representa unha colección de elementos non ordenados e que non permite duplicados. Inspírase no concepto matemático de conxunto.

<figure><img src="/files/F14h6U6gRnoTXLQcEq6I" alt=""><figcaption></figcaption></figure>

As principais características dos conxuntos son:

* **Non admite duplicados:** Se intentas engadir un elemento que xa existe, a estrutura ignórao. Isto fainos ideais para filtrar valores repetidos nunha colección.
* **Sen orde específica:** A diferenza das listas, os conxuntos non garanten que os elementos se garden ou se recuperen na orde en que foron introducidos (salvo implementacións específicas).
* **Eficiencia en búsquedas:** Determinan de forma moi eficiente se un elemento esta contido ou non no conxunto
* Implementan **operacions de tipo axebraico**:
  * **Contén:** Determina se un elemento existe ou non dentro de un conxunto
  * **Unión (de conxuntos A e B):** Devolve un novo conxunto que conten todos os elementos de A e de B. Por exemplo: A = {1,2,3} B={2,3,4}, a súa unión será {1,2,3,4}
  * **Intersección (de conxuntos A e B):** Devolve un novo conxunto que conten os elementos que estan nos dous A e B. A interseccion de A e B do exemplo anterior será {2,3}
  * **Diferenza (de conxuntos A e B):** Devolve os elementos que estan no conxunto A pero non están no conxunto B. A diferencia de A e B será {1}
* Empregan **funcións de tipo hash**: A maioría das implementacións (como `HashSet`) utilizan unha táboa hash para organizar os elementos, o que permite operacións moi veloces

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

## Variantes de implementación

Dependendo de como se xestionen internamente os datos e a orde, existen tres variantes principais:

* **HashSet:** É a implementación máis común. Ofrece o mellor rendemento pero non garante ningunha orde ao iterar sobre os elementos. É a máis rápida para operacións básicas.
* **LinkedHashSet:** Mantén unha lista dobremente enlazada percorrendo os elementos. A diferenza do HashSet, esta variante si mantén a orde de inserción. É lixeiramente máis lenta debido ao mantemento da lista de enlaces.
* **TreeSet:** Os elementos almacénanse nunha estrutura de árbore (normalmente vermello-negra). Os elementos están ordenados polo seu valor natural (ou por un Comparator).

## Exemplos de uso

Un conxunto é unha TAD idoneo cando o que se búsca e a realización de operacións de tipo alxebraica, algún exemplos de uso que poden ilustrar o seu funcionamento serían:

* **Control de accesos ou permisos:** O único que queremos saber e se un usuario esta contido no listado de usuarios con permiso de lectura ou de escritura
* **Redes sociais:** Poderiase empregar para determinar os amigos en comun (Intersección) ou as suxestion de amizade (diferenza).


---

# 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/ud6-estructuras-de-datos-avanzadas/page-2/conxuntos.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.
