إذا كنت بحاجة إلى إنشاء قاموس في برنامج Java، فإن الطريقة الأكثر منطقية لحل هذه المشكلة هي استخدام بنية بيانات القاموس. تتيح لك بنية البيانات هذه تخزين المعلومات في شكل "مفتاح - قيمة". تحتوي Java على فئة قاموس خاصة بالإضافة إلى فرعها Hashtable . هناك أيضًا واجهة Map وفئة HashMap ، التي تخزن أيضًا أزواج "القيمة الرئيسية". لذلك هناك طرق عديدة لإنشاء قاموس جافا.
بنية بيانات القاموس
لذلك، تقوم بنية بيانات القاموس بتخزين المعلومات كمجموعة من المفاتيح والقيمة. أي أننا نربط مفتاحًا بأي قيمة (يمكن أن يكون معرفًا على سبيل المثال) وندخل هذا الزوج في القاموس. يتم معالجة عنصر من عناصر القاموس والحذف والبحث في القاموس بواسطة المفتاح. يبدو من المناسب التنظيم باستخدام بنية البيانات هذه، على سبيل المثال، دليل الهاتف، حيث يتوافق الاسم (المفتاح) مع رقم الهاتف (القيمة).فئة القاموس وامتدادها
في البداية، java.util.Dictionary <K, V> util.Dictionary هي فئة مجردة. إنه يمثل علاقة القيمة الرئيسية ويعمل بشكل مشابه للخريطة. نظرا لمفتاح يمكنك تخزين القيم وعند الحاجة يمكنك استرداد القيمة مرة أخرى باستخدام مفتاحها. وبالتالي، فهي قائمة بأزواج القيمة الرئيسية.
public abstract class Dictionary<K,V> extends Object
وبما أن هذا الفصل مجرد، فلن نعمل معه بشكل مباشر. يحتوي القاموس على فئة فرعية مباشرة Hashtable . لذلك لإنشاء قاموس في Java، يمكنك استخدام Hashtable . تطبق هذه الفئة جدول التجزئة، الذي يعين المفاتيح للقيم ويمكن استخدام أي كائن غير فارغ كمفتاح أو كقيمة. في التسلسل الهرمي لـ Java ، يقوم Hashtable بتوسيع القاموس وتنفيذ Map . دعونا نعطي مثالا. سنقوم بإنشاء قاموس كلاسيكي، ودليل هاتف، استنادًا إلى 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);
}
}
الإخراج هو:
{أندرو أرنولد=1298، جوني ووكر=2178، ريكي ماكبرايت=2001، آيفي بريجز=1877} 1877 لاغ صحيح [أندرو أرنولد، جوني ووكر، ريكي ماكبرايت، آيفي بريجز] [1298، 2178، 2001، 1877] 4 {جوني ووكر =2178، ريكي ماكبرايت = 2001، آيفي بريجز = 1877}
HashMap كقاموس
HashMap ، على عكس Hashtable ، ليس سليلًا مباشرًا للقاموس . ومع ذلك، نظرًا لوجود العديد من الميزات، فمن الأفضل في معظم الحالات إنشاء قاموس باستخدام HashMap . تشبه فئة HashMap إلى حد كبير وظيفة Hashtable . والفرق الرئيسي هو أن أساليب Hashtable متزامنة ، ولكن HashMap ليست كذلك. تؤدي المزامنة في Hashtable إلى تقليل أداء التعليمات البرمجية. بالإضافة إلى ذلك، تسمح فئة HashMap ، على عكس Hashtable ، باستخدام القيمة null كمفتاح (واحد) ومجموعة من القيم الخالية كقيم. في حالتنا، سيبدو البرنامج تمامًا مثل المثال أعلاه. والفرق الوحيد هو في نوع المجموعة. ومع ذلك، هذه هي الطريقة المفضلة للعمل مع القواميس في Java في معظم الحالات.
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);
}
}
هنا هو الإخراج:
{أندرو أرنولد=1298، آيفي بريجز=1877، ريكي ماكبرايت=2001، جوني ووكر=2178} 2178 1877 null true false [أندرو أرنولد، آيفي بريجز، ريكي ماكبرايت، جوني ووكر] [1298، 1877، 2001، 2178] 4 { آيفي بريجز = 1877، ريكي ماكبرايت = 2001، جوني ووكر = 2178}
GO TO FULL VERSION