หากคุณต้องการสร้างพจนานุกรมในโปรแกรม Java วิธีที่เหมาะสมที่สุดในการแก้ปัญหานี้คือการใช้โครงสร้างข้อมูลพจนานุกรม โครงสร้างข้อมูลนี้ช่วยให้คุณสามารถจัดเก็บข้อมูลในรูปแบบ "คีย์ - ค่า" Java มี คลาส พจนานุกรม พิเศษ เช่นเดียวกับHashtable ที่สืบทอด มา นอกจากนี้ยังมี อินเทอร์เฟ ซแผนที่และ คลาส HashMapซึ่งเก็บคู่ "คีย์ - ค่า" ไว้ด้วย ดังนั้นจึงมีหลายวิธีในการสร้างพจนานุกรม Java
โครงสร้างข้อมูลพจนานุกรม
ดังนั้น โครงสร้างข้อมูลพจนานุกรมจึงเก็บข้อมูลเป็นคีย์-ค่าผสม นั่นคือเราเชื่อมโยงคีย์กับค่าใด ๆ (อาจเป็นเช่น id) และป้อนคู่นี้ลงในพจนานุกรม การระบุองค์ประกอบของพจนานุกรม การลบ การค้นหาในพจนานุกรมนั้นดำเนินการโดยปุ่ม ดูเหมือนจะสะดวกในการจัดระเบียบโดยใช้โครงสร้างข้อมูล เช่น สมุดโทรศัพท์ ซึ่งชื่อ (คีย์) ตรงกับหมายเลขโทรศัพท์ (ค่า)คลาสพจนานุกรมและส่วนขยาย
เริ่มต้นด้วยjava.util.Dictionary <K, V> util.Dictionaryเป็นคลาสนามธรรม มันแสดงถึงความสัมพันธ์ของคีย์-ค่าและทำงานคล้ายกับแผนที่ กำหนดคีย์ที่คุณสามารถเก็บค่าและเมื่อจำเป็นสามารถดึงค่ากลับมาโดยใช้คีย์ของมัน ดังนั้นจึงเป็นรายการคู่คีย์-ค่าpublic abstract class Dictionary<K,V> extends Object
เนื่องจากคลาสนี้เป็นนามธรรม เราจะไม่ทำงานกับคลาสนี้โดยตรง พจนานุกรม มี Hashtableคลาสลูกโดยตรง ดังนั้นสำหรับการสร้างพจนานุกรมใน Java คุณสามารถใช้Hashtable คลาสนี้ใช้ตารางแฮช ซึ่งแม็พคีย์กับค่า และออบเจกต์ที่ไม่ใช่ค่า Null สามารถใช้เป็นคีย์หรือเป็นค่าได้ ในลำดับชั้นของ 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);
}
}
ผลลัพธ์คือ:
{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, 1877] 4 {จอห์นนี่ วอล์กเกอร์ =2178, Ricky McBright=2001, Ivy Briggs=1877}
HashMap เป็นพจนานุกรม
HashMapซึ่งแตกต่างจากHashtableคือไม่ใช่ลูกหลานโดยตรงของDictionary อย่างไรก็ตาม เนื่องจากคุณสมบัติหลายอย่าง ในกรณีส่วนใหญ่ การสร้างพจนานุกรมโดยใช้ HashMap จะดีกว่า คลาสHashMapนั้นคล้ายกับฟังก์ชันHashtable มาก ข้อแตกต่างที่สำคัญคือเมธอดของHashtableถูกซิงโครไนซ์ แต่HashMapไม่ซิ งโครไนซ์ การซิงโครไนซ์ในHashtableทำให้ประสิทธิภาพของโค้ดลดลง นอกจากนี้ คลาส HashMapซึ่งแตกต่างจากHashtableอนุญาตให้ใช้ null เป็นคีย์ (หนึ่ง) และชุดของ 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);
}
}
นี่คือผลลัพธ์:
{Andrew Arnold=1298, Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178} 2178 1877 null จริงเท็จ [Andrew Arnold, Ivy Briggs, Ricky McBright, Johnny Walker] [1298, 1877, 2001, 2178] 4 { Ivy Briggs=1877, Ricky McBright=2001, Johnny Walker=2178}