CodeGym /בלוג Java /Random-HE /כיצד ליצור מילון ב-Java
John Squirrels
רָמָה
San Francisco

כיצד ליצור מילון ב-Java

פורסם בקבוצה
אם אתה צריך ליצור מילון בתוכנת Java, הדרך ההגיונית ביותר לפתור בעיה זו היא להשתמש במבנה הנתונים של המילון. מבנה נתונים זה מאפשר לאחסן מידע בצורה "מפתח - ערך". ל-Java יש מחלקה מיוחדת למילון , כמו גם את הצאצא שלה, Hashtable . כמו כן, יש את ממשק Map ומחלקת HashMap , המאחסנת גם זוגות "מפתח - ערך". אז ישנן דרכים רבות ליצור מילון Java.

מבנה נתונים של מילון

אז, מבנה הנתונים של המילון מאחסן מידע כשילוב מפתח-ערך. כלומר, לכל ערך נשייך מפתח (זה יכול להיות, למשל, id) ונזין את הצמד הזה למילון. התייחסות לרכיב במילון, מחיקה, חיפוש במילון מתבצע על ידי המקש. זה נראה נוח לארגן באמצעות מבנה נתונים כזה, למשל, ספר טלפונים, שבו השם (מפתח) מתאים למספר הטלפון (הערך).

כיתת מילון והרחבה שלו

מלכתחילה, java.util.Dictionary <K, V> util.Dictionary היא מחלקה מופשטת. הוא מייצג יחס מפתח-ערך ופועל בדומה למפה. בהינתן מפתח אתה יכול לאחסן ערכים ובמידת הצורך ניתן להחזיר את הערך באמצעות המפתח שלו. לפיכך, זוהי רשימה של צמד מפתח-ערך.
public abstract class Dictionary<K,V> extends Object
מכיוון שהמחלקה הזו מופשטת, לא נעבוד איתה ישירות. למילון יש כיתת ילדים ישירה Hashtable . אז ליצירת מילון ב-Java אתה יכול להשתמש ב-Hashtable . מחלקה זו מיישמת טבלת hash, אשר ממפה מפתחות לערכים וכל אובייקט שאינו ריק יכול לשמש כמפתח או כערך. בהיררכיית Java Hashtable מרחיבה את מילון ומטמיעה את מפה . בואו ניתן דוגמה. אנחנו הולכים ליצור מילון קלאסי, ספר טלפונים, המבוסס על Hashtable .
Dictionary phoneBook = new Hashtable();
אם נכתוב כך, עלינו ליישם ליהוק סוג עבור פעולות מסוימות. למשל, לחילוץ מפתח.
System.out.println(((Hashtable) phoneBook).keySet());
כדי להימנע מכך, אנו יכולים לשנות
Dictionary phoneBook = new Hashtable ();
על
Hashtable phoneBook = new Hashtable ();
בדוגמה שלנו, למען הבהירות, נשאיר את האפשרות הראשונה.
import java.util.Dictionary;
import java.util.Hashtable;

public class DictionaryDemo {

       public static void main(String[] args) {

           Dictionary phoneBook = new Hashtable();

           // put() method
           phoneBook.put("Johnny Walker", "2178");
           phoneBook.put("Andrew Arnold", "1298");
           phoneBook.put("Ivy Briggs", "1877");
           phoneBook.put("Ricky McBright", "2001");

           //print out Hashtable out
           System.out.println(phoneBook);

           //let's get the value using the key
           System.out.println(phoneBook.get("Ivy Briggs"));
           //there's no such key in out Hashtable
           System.out.println(phoneBook.get("Sol Frank"));

           //Is there a record with the "Johnny Walker" key?
           System.out.println(((Hashtable) phoneBook).containsKey("Johnny Walker"));
           //all keys of the Hashtable
           System.out.println(((Hashtable) phoneBook).keySet());
           //values from Hashtable
           System.out.println(((Hashtable) phoneBook).values());

           //the quantity of records
           System.out.println(phoneBook.size());
           //removing one record
           phoneBook.remove("Andrew Arnold");
           System.out.println(phoneBook);
       }
   }
הפלט הוא:
{Andrew Arnold=1298, Johnny Walker=2178, Ricky McBright=2001, Ivy Briggs=1877} 1877 null true [Andrew Arnold, Johnny Walker, Ricky McBright, Ivy Briggs] [1298, 2178, 2001, 4Johnny Walker] =2178, ריקי מקבריט=2001, אייבי בריגס=1877}

HashMap כמילון

HashMap , בניגוד ל- Hashtable , אינו צאצא ישיר של מילון . עם זאת, בשל תכונות רבות, ברוב המקרים עדיף ליצור מילון באמצעות HashMap . מחלקת HashMap דומה מאוד בפונקציונליות ל- Hashtable . ההבדל העיקרי הוא שהשיטות של ה- Hashtable מסונכרנות, אבל ה- HashMap לא. סנכרון ב- Hashtable מקטין את ביצועי הקוד. בנוסף, מחלקת HashMap , בניגוד ל-Hashtable , מאפשרת שימוש ב-null כמפתח (אחד) ובסט של null כערכים. במקרה שלנו, התוכנית תיראה בדיוק כמו הדוגמה שלמעלה. ההבדל היחיד הוא בסוג הקולקציה. עם זאת, זו הדרך המועדפת לעבוד עם מילונים בג'אווה ברוב המקרים.
import java.util.HashMap;
import java.util.Map;

public class DictionaryDemo2 {

   public static void main(String[] args) {

       Map<String, String> phoneBook = new HashMap<String,String>();

       phoneBook.put("Johnny Walker", "2178");
       phoneBook.put("Andrew Arnold", "1298");
       phoneBook.put("Ivy Briggs", "1877");
       phoneBook.put("Ricky McBright", "2001");

       System.out.println(phoneBook);

       System.out.println(phoneBook.get("Johnny Walker"));
       System.out.println(phoneBook.get("Ivy Briggs"));
       System.out.println(phoneBook.get("Unknown Friend"));

       System.out.println(phoneBook.containsKey("Johnny Walker"));
       System.out.println(phoneBook.containsKey("Unknown Friend"));

       System.out.println(phoneBook.keySet());
       System.out.println(phoneBook.values());

       System.out.println(phoneBook.size());

       phoneBook.remove("Andrew Arnold");

       System.out.println(phoneBook);
   }

}
הנה הפלט:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null true false [אנדרו ארנולד, אייבי בריגס, ריקי מקבריט, ג'וני ווקר] [1298, 187817, 410817, 420 אייבי בריגס=1877, ריקי מקבריט=2001, ג'וני ווקר=2178}
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION