Skip to content

Commit 09b7417

Browse files
committed
feat(content): add basic hashmap
1 parent a6aa571 commit 09b7417

File tree

1 file changed

+146
-0
lines changed

1 file changed

+146
-0
lines changed

content/2.basic/30.hashmap.md

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
---
2+
title: 'HashMap'
3+
description: 'Explorando HashMap en Rust: Almacenamiento y Manipulación Eficiente de Datos Asociativos'
4+
draft: true
5+
data:
6+
type: 'custom'
7+
topicLevel: 'medium'
8+
position:
9+
x: 120
10+
y: 600
11+
# width: 320
12+
externalLinks:
13+
- name: 'Libro Oficial'
14+
english: false
15+
link: 'https://book.rustlang-es.org/ch08-03-hash-maps'
16+
- name: 'Comprehensive Rust'
17+
english: true
18+
link: 'https://google.github.io/comprehensive-rust/es/std-types/hashmap.html'
19+
- name: 'Documentacion Oficial'
20+
english: true
21+
link: 'https://doc.rust-lang.org/std/collections/struct.HashMap.html'
22+
---
23+
## HashMap en Rust: Almacenamiento y Manipulación Eficiente de Datos Asociativos
24+
25+
En Rust, el tipo `HashMap<K, V>` es una colección poderosa que permite almacenar pares clave-valor de manera eficiente. Los `HashMap` son ampliamente utilizados cuando se necesita un acceso rápido y eficiente a los datos basados en claves únicas. En este blog post, exploraremos el funcionamiento de los `HashMap` en Rust, cómo se utilizan, su representación en memoria, sus ventajas, y algunos patrones de uso comunes.
26+
27+
### ¿Qué es un `HashMap<K, V>`?
28+
29+
Un `HashMap<K, V>` es una colección que almacena pares clave-valor, donde cada clave es única y se asocia con un valor. Este tipo de datos es ideal para situaciones en las que se necesita acceder, insertar o eliminar elementos rápidamente mediante una clave.
30+
31+
### Funcionamiento en Memoria
32+
33+
Internamente, un `HashMap<K, V>` se implementa utilizando una tabla hash. La clave se pasa a través de una función hash para determinar la ubicación en la tabla donde se almacenará el valor correspondiente. Esto permite operaciones de búsqueda, inserción y eliminación muy eficientes.
34+
35+
#### Gráfico: Representación en Memoria de un `HashMap<K, V>`
36+
37+
```plaintext
38+
HashMap:
39+
+-------+------+-------+------+
40+
| Clave | Hash | Índice | Valor |
41+
+-------+------+-------+------+
42+
| "a" | 1234 | 0 | 10 |
43+
| "b" | 5678 | 1 | 20 |
44+
| "c" | 9101 | 2 | 30 |
45+
+-------+------+-------+------+
46+
```
47+
48+
### Creación y Uso de `HashMap<K, V>`
49+
50+
Crear y manipular un `HashMap<K, V>` en Rust es sencillo. A continuación, se muestran algunos ejemplos básicos:
51+
52+
#### Ejemplo 1: Creación y Adición de Elementos
53+
54+
```rust
55+
use std::collections::HashMap;
56+
57+
fn main() {
58+
let mut mapa = HashMap::new(); // Crear un nuevo HashMap vacío
59+
mapa.insert("clave1", 10); // Insertar pares clave-valor
60+
mapa.insert("clave2", 20);
61+
mapa.insert("clave3", 30);
62+
63+
println!("{:?}", mapa); // Output: {"clave1": 10, "clave2": 20, "clave3": 30}
64+
}
65+
```
66+
67+
#### Ejemplo 2: Acceso a Elementos
68+
69+
```rust
70+
use std::collections::HashMap;
71+
72+
fn main() {
73+
let mut mapa = HashMap::new();
74+
mapa.insert("clave1", 10);
75+
mapa.insert("clave2", 20);
76+
77+
if let Some(valor) = mapa.get("clave1") {
78+
println!("El valor para 'clave1' es: {}", valor); // Output: El valor para 'clave1' es: 10
79+
}
80+
}
81+
```
82+
83+
#### Ejemplo 3: Iteración sobre un `HashMap<K, V>`
84+
85+
```rust
86+
use std::collections::HashMap;
87+
88+
fn main() {
89+
let mut mapa = HashMap::new();
90+
mapa.insert("clave1", 10);
91+
mapa.insert("clave2", 20);
92+
mapa.insert("clave3", 30);
93+
94+
for (clave, valor) in &mapa {
95+
println!("Clave: {}, Valor: {}", clave, valor);
96+
}
97+
}
98+
```
99+
100+
### Ventajas de Usar `HashMap<K, V>`
101+
102+
- **Acceso Rápido:** Los `HashMap` proporcionan un acceso constante promedio O(1) a los valores mediante sus claves, lo que los hace muy eficientes para búsquedas rápidas.
103+
- **Flexibilidad:** Permiten almacenar pares clave-valor de cualquier tipo, siempre que las claves implementen las traits `Eq` y `Hash`.
104+
- **Versatilidad:** Son útiles en una amplia gama de aplicaciones, desde bases de datos simples hasta sistemas de caché y configuraciones.
105+
106+
### Métodos Comunes de `HashMap<K, V>`
107+
108+
- `insert()`: Añade un par clave-valor al `HashMap`.
109+
- `get()`: Recupera un valor asociado con una clave específica.
110+
- `remove()`: Elimina un par clave-valor del `HashMap`.
111+
- `contains_key()`: Verifica si una clave está presente en el `HashMap`.
112+
- `entry()`: Proporciona una manera eficiente de insertar o modificar un valor basado en una clave.
113+
114+
#### Ejemplo: Métodos Comunes
115+
116+
```rust
117+
use std::collections::HashMap;
118+
119+
fn main() {
120+
let mut mapa = HashMap::new();
121+
mapa.insert("clave1", 10);
122+
123+
// Verificar si una clave existe
124+
if mapa.contains_key("clave1") {
125+
println!("'clave1' existe en el mapa.");
126+
}
127+
128+
// Uso de entry para insertar o modificar un valor
129+
mapa.entry("clave2").or_insert(20);
130+
mapa.entry("clave1").and_modify(|v| *v += 10);
131+
132+
println!("{:?}", mapa); // Output: {"clave1": 20, "clave2": 20}
133+
}
134+
```
135+
136+
### Diferencia con Otros Tipos de Colección
137+
138+
A diferencia de los vectores (`Vec<T>`), que almacenan elementos en un orden específico y permiten el acceso mediante índices, los `HashMap` almacenan elementos en base a claves únicas y permiten el acceso mediante estas claves. Esto los hace más adecuados para aplicaciones donde se necesita acceso rápido a valores específicos basados en claves, en lugar de operaciones de secuencia ordenada.
139+
140+
### Coste Computacional de `HashMap<K, V>`
141+
142+
El uso de `HashMap` implica un coste computacional para calcular las funciones hash y manejar posibles colisiones. Sin embargo, Rust optimiza estas operaciones para mantener el acceso a los datos lo más eficiente posible. La mayoría de las operaciones tienen un coste promedio de O(1), lo que las hace muy eficientes en la práctica.
143+
144+
### Conclusión
145+
146+
`HashMap<K, V>` es una herramienta esencial en Rust para trabajar con colecciones de datos asociativos. Su flexibilidad, eficiencia y compatibilidad con las claves únicas lo hacen adecuado para una amplia gama de aplicaciones. Al comprender cómo funciona `HashMap<K, V>` en memoria, sus ventajas y cómo utilizar sus métodos comunes, los desarrolladores pueden aprovechar al máximo las capacidades de Rust para manejar datos de manera efectiva y segura.

0 commit comments

Comments
 (0)