# Τι είναι το Java HashMap και πώς χρησιμοποιείται

Η κλάση HashMap στη Java σάς επιτρέπει να αποθηκεύετε δεδομένα σε ζεύγη κλειδιού-τιμής. Αυτό όχι μόνο διευκολύνει την ανάκτηση και τη διαχείριση μιας λίστας, αλλά σας παρέχει επίσης πολλές επιλογές πρόσβασης. Εδώ θα εξετάσουμε τις πιο σημαντικές μεθόδους.

## Τι είναι τα HashMaps στη Java;

Υπάρχουν διάφοροι τρόποι αποθήκευσης και ανάκτησης δεδομένων. Ο τύπος αποθήκευσης που λειτουργεί καλύτερα εξαρτάται από τον τρόπο με τον οποίο σκοπεύετε να χρησιμοποιήσετε τα δεδομένα. Σε πολλές περιπτώσεις, η κλάση Java HashMap είναι πιθανώς η καλύτερη λύση. Σε αντίθεση με άλλες μεθόδους, αυτή η κλάση αποθηκεύει τα δεδομένα ως **ζεύγη κλειδιού-τιμής**. Αυτό σημαίνει ότι σε κάθε κλειδί αντιστοιχεί ακριβώς μία τιμή. Αν θέλετε να ανακτήσετε μια τιμή, μπορείτε να χρησιμοποιήσετε το αντίστοιχο κλειδί για να λάβετε το αποτέλεσμα που αναζητάτε. Τα κλειδιά και οι τιμές μπορεί να αποτελούνται από εντελώς διαφορετικούς τύπους δεδομένων, όπως συμβολοσειρές, αριθμούς ή άλλα αντικείμενα.

Η κλάση Java HashMap προσφέρει πολλά πλεονεκτήματα. Το πρώτο είναι ότι μπορείτε να πραγματοποιήσετε γρήγορη αναζήτηση μέσα στη γλώσσα προγραμματισμού. Η προσέγγιση κλειδί-τιμή εξασφαλίζει επίσης ότι δεν αποδίδονται πολλαπλές τιμές σε ένα κλειδί, **αποτρέποντας έτσι τις διπλές καταχωρήσεις**. Ωστόσο, μπορείτε να προσθέσετε το ίδιο αντικείμενο πολλές φορές χρησιμοποιώντας διαφορετικά κλειδιά. Αυτός ο τύπος αποθήκευσης και λειτουργικότητας αναζήτησης έχει θετική επίδραση στην απόδοση σε σύγκριση με τις άκαμπτες λίστες, οι οποίες είναι σημαντικά λιγότερο ευέλικτες. Αυτό είναι επίσης ένα από τα σημαντικότερα πλεονεκτήματα των αποθηκευτικών χώρων κλειδιού-τιμής, οι οποίοι χρησιμοποιούν την ίδια αρχή. Στις επόμενες ενότητες, θα σας δείξουμε πώς να δημιουργείτε και να χρησιμοποιείτε Java HashMaps.

## Πώς να δημιουργήσετε και να χρησιμοποιήσετε HashMaps σε Java

Για να δημιουργήσετε ένα νέο HashMap σε Java, πρέπει πρώτα να εισαγάγετε την κλάση. Για να το κάνετε αυτό, χρησιμοποιήστε την εντολή Java `import`. Ο κώδικας έχει την εξής μορφή:

```java
import java.util.HashMap;
HashMap<String, String> nameOfTheHashMap = new HashMap<String, String> ();
```

Οι δύο τύποι δεδομένων, οι οποίοι διαχωρίζονται με κόμμα (στην περίπτωση αυτή, `String, String`), είναι το κλειδί και η τιμή.

### Δημιουργία νέου HashMap

Για να εξηγήσουμε καλύτερα τον τρόπο λειτουργίας των Java HashMaps, έχουμε δημιουργήσει ένα απλό παράδειγμα. Για το παράδειγμά μας, έχουμε μια λίστα πελατών που μια εταιρεία θέλει να αποθηκεύσει και να έχει πρόσβαση ανά πάσα στιγμή. Η λίστα περιλαμβάνει το όνομα κάθε πελάτη και έναν μοναδικό αριθμό πελάτη. Αν και ο αριθμός πελάτη (το κλειδί στο παράδειγμά μας) είναι πάντα μοναδικός, είναι πιθανό να υπάρχουν περισσότεροι πελάτες με το ίδιο όνομα. Ωστόσο, κάθε ένας από αυτούς τους πελάτες έχει τον δικό του μοναδικό αριθμό. Αυτός ο αριθμός καταγράφεται ως τύπος δεδομένων ακέραιου αριθμού και τα ονόματα ως συμβολοσειρές. Δείτε πώς μπορείτε να το ρυθμίσετε σε ένα Java HashMap:

```java
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	}
}
```

### Προσθήκη στοιχείων

Τώρα έχουμε το Java HashMap, αλλά είναι ακόμα άδειο. Για να προσθέσουμε νέα ζεύγη κλειδιών-τιμών, θα χρησιμοποιήσουμε τη μέθοδο `put()`. Δείτε πώς λειτουργεί:

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList);
	}
}
```

Χρησιμοποιούμε την εντολή `System.out.println` για να εμφανίσουμε τη λίστα των πελατών μας. Το αποτέλεσμα θα πρέπει να μοιάζει με αυτό:

```java
{1077=Jerry Mowry, 15312=Peter Smith, 73329=Maria Grosso}
```

### Ανάκτηση στοιχείων

Τώρα έχουμε δημιουργήσει μια λίστα πελατών που μπορεί να περιέχει πολλές εγγραφές. Θέλουμε επίσης να έχουμε πρόσβαση σε κάθε εγγραφή πελάτη ξεχωριστά. Για να το κάνουμε αυτό, περνάμε το κλειδί στη μέθοδο **get()**. Ακολουθεί ένα παράδειγμα του πώς λειτουργεί αυτό:

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList.get(1077));
	}
}
```

Θα πρέπει να εμφανίζεται μόνο το όνομα «Jerry Mowry».

### Διαγραφή καταχωρήσεων

Αν θέλετε να διαγράψετε μια καταχώριση, χρησιμοποιήστε τη μέθοδο `remove()`. Ακολουθεί ένα παράδειγμα χρήσης αυτής της μεθόδου:

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	customerList.remove(1077);
	System.out.println(customerList);
	}
}
```

Το αποτέλεσμα έχει τώρα την εξής μορφή:

```java
{15312=Peter Smith, 73329=Maria Grosso}
```

Μια άλλη επιλογή είναι να διαγράψετε ολόκληρη τη λίστα. Για να το κάνετε αυτό, χρησιμοποιήστε τη μέθοδο `clear()`.

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	customerList.clear();
	System.out.println(customerList);
	}
}
```

Τώρα, το μόνο αποτέλεσμα που λαμβάνουμε είναι το εξής:

```java
{ }
```

## Πώς να προσδιορίσετε τον αριθμό των συμμετοχών

Αν και το Java HashMap είναι αρκετά απλό, μπορείτε επίσης να χρησιμοποιήσετε αυτήν την κλάση για να διαχειριστείτε μεγαλύτερα και πιο σύνθετα έργα. Σε ένα μεγαλύτερο έργο, ίσως θελήσετε να προσδιορίσετε τον ακριβή αριθμό των εγγραφών που έχετε. Σε τελική ανάλυση, αυτός θα είναι ο συνολικός αριθμός των πελατών σας. Μπορείτε να χρησιμοποιήσετε `size()` για να το κάνετε αυτό. Δείτε πώς:

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList.size());
	}
}
```

Στο παράδειγμά μας, εμφανίζεται ο αριθμός 3.

### Πώς να εμφανίσετε μόνο κλειδιά ή τιμές

Μπορείτε επίσης να λάβετε μια λίστα που περιλαμβάνει μόνο τα κλειδιά ή τις τιμές, χρησιμοποιώντας έναν βρόχο for-each. Για να ανακτήσετε κλειδιά, χρησιμοποιήστε τη μέθοδο `keySet()`, και για τιμές, χρησιμοποιήστε τη μέθοδο `values()`. Στο παρακάτω παράδειγμα κώδικα, θα χρησιμοποιήσουμε `values()`:

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	for (String i : customerList.values()) {
		System.out.println(i);
		}
	}
}
```

Το αποτέλεσμα είναι:

```java
Jerry Mowry
Peter Smith
Maria Grosso
```

### Έλεγχος αν ένα HashMap περιέχει μια συγκεκριμένη τιμή ή κλειδί

Εκτός από την πρόσβαση σε μια συγκεκριμένη καταχώριση, μπορείτε επίσης να ελέγξετε αν μια καταχώριση υπάρχει ήδη σε ένα Java HashMap. Μπορείτε να το κάνετε αυτό χρησιμοποιώντας τη μέθοδο `containsKey()` (για κλειδιά) και τη μέθοδο `containsValue()` (για τιμές). Εάν το στοιχείο περιλαμβάνεται, η έξοδος θα είναι «true». Εάν το στοιχείο δεν βρίσκεται στο HashMap, η έξοδος θα είναι «false». Δείτε πώς λειτουργούν και οι δύο μέθοδοι:

```java
public class Main {
public static void main(String[] args) {
	HashMap<Integer, String> customerList = new HashMap<>();
	customerList.put (1077, "Jerry Mowry");
	customerList.put (15312, "Peter Smith");
	customerList.put (73329, "Maria Grosso");
	System.out.println(customerList.containsKey(15312));
	System.out.println(customerList.containsValue("Stuart Miller");
	}
}
```

Δεδομένου ότι ο κωδικός «15312» περιλαμβάνεται, αλλά η τιμή «Stuart Miller» δεν περιλαμβάνεται, το αποτέλεσμα έχει την εξής μορφή.

```java
true
false
```


This is a markdown version of: [https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/java-hashmap/](https://www.ionos.com/el-gr/digitalguide/istoselides/anaptyxi-istoselidon/java-hashmap/) for AI/LLM consumption.