User Tools

Site Tools


java:jfc_intf_map

This is an old revision of the document!


java.util.Map

Ένα αντικείμενο τύπου Map.Entry αντιστοιχεί “τιμές” σε “κλειδιά”. Τόσο οι τιμές όσο και τα κλειδιά μπορεί να είναι οποιουδήποτε τύπου. Ο στόχος της συγκεκριμένης δομής είναι να μπορούμε έχοντας το κλειδί να λάβουμε την τιμή που αντιστοιχεί σε αυτό. Οι μέθοδοι του interface Map.Entry δίνονται στον παρακάτω πίνακα.

Μία δομή τύπου Map είναι μία δομή που περιέχει εγγραφές τύπου Map.Entry με την ιδιαιτερότητα ότι δεν μπορεί να διαθέτει δύο εγγραφές με το ίδιο κλειδί (μπορεί όμως να διαθέτει δύο εγγραφές με διαφορετικά κλειδιά, αλλά ίδιες τιμές).

Η java διατηρεί τρεις βασικές κλάσεις που υλοποιούν το Map interface, HashMap, TreeMap και LinkedHashMap.

Βασικές υλοποιήσεις του Map interface είναι οι παρακάτω:

  • HashMap: Υλοποιεί το Map μέσα από ένα HashTable. Γρήγορο στην αναζήτηση. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Map.
  • TreeMap: Υλοποιεί το Map μέσα από ένα Red-Black tree. Πιο αργό στην αναζήτηση, αλλά επίσης αρκετά γρήγορο. Δεν εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα. Η σειρά διάτρεξης είναι η σειρά κατάταξης των στοιχείων (υλοποιεί τον interface SortedMap).
  • LinkedHashMap: Υλοποιεί το Map μέσα από ένα HashTable με παράλληλη χρήση διπλά διασυνδεδεμένης λίστας. Γρήγορο στην αναζήτηση. Εγγυάται ότι η σειρά διάτρεξης είναι η σειρά με την οποία εισάγαμε τα δεδομένα, λόγω της ύπαρξης της λίστας. Απαιτεί κατά κανόνα περισσότερο χώρο αποθήκευσης από τον στοιχεία που περιέχει το Map.

Διαθέτει τις εξής μεθόδους που δεν διατίθενται στο interface Collection ή έχουν διαφορετική λειτουργία από τα interfaces που είδαμε μέχρι τώρα.

  • containsKey(Object key) - Επιστρέφει true αν η δομή περιέχει το συγκεκριμένο κλειδί
  • containsValue(Object value) - Επιστρέφει true αν η δομή περιέχει την συγκεκριμένη τιμή αντιστοιχισμένη με ένα ή περισσότερα κλειδιά.
  • remove(Object key) - Διαγράφει την εγγραφή που αντιστοιχεί στο κλειδί key επιστρέφοντας την τιμή V ή null αν δεν βρέθηκε το κλειδί.
  • replace(K key, V value) - Αντικαθιστά την εγγραφή που αντιστοιχεί στο κλειδί key επιστρέφοντας την τιμή V. Δεν γίνεται αντικατάσταση αν δεν βρεθεί το κλειδί στο Map.
  • put(K key, V value) - A Διαγράφει την εγγραφή που αντιστοιχεί στο κλειδί key επιστρέφοντας την τιμή V ή null αν δεν υπήρχε προηγούμενη καταχώρηση για το συγκεκριμένο κλειδί.
  • get(Object key) - Επιστρέφει την τιμή που αντιστοιχεί στο δεδομένο κλειδί ή null αν δεν υπάρχει καταχώρηση για το συγκεκριμένο κλειδί.

Μετατροπή του Map σε μορφή που να μπορείτε να το διατρέξετε (Collection ή Set)

  • entrySet() - Επιστρέφει ένα Set από καταχωρήσεις τύπου Entry.Map όπου κάθε καταχώρηση περιέχει το συνδυασμό κλειδί-τιμή.
  • values() - Επιστρέφει ένα Collection με τις τιμές του Map δίχως τα κλειδιά. Μία τιμή μπορεί να εμφανίζεται περισσότερες από μία φορές αν αντιστοιχεί σε περισσότερα του ενός κλειδιά.
  • keySet() - Επιστρέφει ένα Set με τα κλειδιά.
StudentMap.java
import java.util.*;
import java.lang.*;
 
public class StudentMap {
 
  private Map<Integer,Student> students;
 
  public StudentMap() {
    students = new LinkedHashMap<Integer,Student>();
    populateMap();
  }
 
  public final void populateMap() {
    students.put(1, new Student("John", "Smith"));
    students.put(2, new Student("Stanley", "Peters"));
    students.put(3, new Student("Edgar", "Bloch"));
    students.put(4, new Student("Suzan", "Miles"));
    students.put(5, new Student("Mary", "Poppins"));
  }
 
  public void iterateMapEntries() { 
    Set set = students.entrySet();
    Iterator it = set.iterator();
    while(it.hasNext()) {
      System.out.println(it.next().toString());
    }
  }
 
  public void iterateMapValues() { 
    Collection col = students.values();
    Iterator it = col.iterator();
    while(it.hasNext()) {
      System.out.println(it.next().toString());
    }
  }
 
  public void iterateMapKeys() { 
    Set set = students.keySet();
    Iterator it = set.iterator();
    while(it.hasNext()) {
      System.out.println(it.next().toString());
    }
  }
 
  public static void main(String args[]) {
    StudentMap stl = new StudentMap();
    System.out.println("Map keys are:");
    stl.iterateMapKeys();
    System.out.println("Map values are:");
    stl.iterateMapValues();
    System.out.println("Map key-value pairs are:");
    stl.iterateMapEntries();
  }
}
java/jfc_intf_map.1486502460.txt.gz · Last modified: 2017/02/07 21:21 by gthanos