“และสุดท้าย ฉันจะบอกคุณเกี่ยวกับแผนที่”

"อย่างที่คุณทราบ Map เก็บชุดของคู่คีย์-ค่าไว้ คีย์ต้องไม่ซ้ำกัน แต่ค่าสามารถเป็นอะไรก็ได้ หากคุณเพิ่มคู่คีย์-ค่าลงในแผนที่ และคอลเลกชันมีคีย์อยู่แล้ว ค่าเก่าจะถูกแทนที่ด้วยค่าใหม่ กล่าวอีกนัยหนึ่งคีย์ทำหน้าที่เหมือนดัชนีพิเศษที่สามารถเป็นวัตถุใดๆ ก็ได้ "

แผนที่เป็นคำศัพท์ทางคณิตศาสตร์ที่ใช้แทนเซตของคู่ (x, y) ซึ่ง x แต่ละตัวไม่ซ้ำกันจะสัมพันธ์กับ y บางตัว

โปรแกรมเมอร์ชื่นชอบ Map มาก เราจึงขอนำเสนอ 4 คอลเล็กชันที่แตกต่างกันที่ใช้อินเทอร์เฟซ Map:

"นี่คือโครงสร้างการสืบทอดอย่างง่าย:"

ลำดับชั้นของแผนที่ - 1

"สีเหลืองแสดงว่ารายการเป็นอินเทอร์เฟซที่ซ้อนกันใน อินเทอร์เฟซ แผนที่ "

"รายการถูกเพิ่มเพื่ออธิบายคู่องค์ประกอบเป็นเอนทิตีเดียว"

"นี่คือวิธีการของ Map<K,V>:"

วิธีการ คำอธิบาย
int size() ส่งกลับจำนวนคู่ในแผนที่
boolean isEmpty() ตรวจสอบว่าแผนที่ว่างเปล่าหรือไม่
boolean containsKey(Object key) แผนที่มีคีย์ที่ระบุหรือไม่
boolean containsValue(Object value) แผนที่มีค่าที่ระบุหรือไม่
V get(Object key) ส่งกลับค่าสำหรับคีย์ที่ระบุ
V put(K key, V value) ตั้งค่าใหม่สำหรับคีย์
เมธอดส่งคืนค่าเก่าหรือค่าว่าง
putAll(Map<? extends K, ? extends V> m) เพิ่มคู่จากแผนที่อื่น
void clear() ล้างแผนที่คือลบคู่ทั้งหมด
Set<K>keySet() ส่งกลับชุดของคีย์
Collection<V>values() ส่งกลับชุดของค่า
Set<Map.Entry<K, V>>entrySet() ส่งกลับชุดของคู่

"K และ V เป็นพารามิเตอร์ประเภทสำหรับคีย์และค่าต่างๆ"

"อืม ฉันคุ้นเคยกับวิธีการส่วนใหญ่ แต่ฉันเคยได้ผลกับบางวิธีเท่านั้น"

"คุณสามารถบอกอะไรฉันได้อีกเกี่ยวกับชั้นเรียนเริ่มต้น"

"คลาสนี้อธิบายองค์ประกอบคู่ มันมีไม่กี่วิธี:"

วิธีการ คำอธิบาย
getKey() ส่งกลับคีย์ของคู่คีย์-ค่า
getValue() ส่งกลับค่าของคู่คีย์-ค่า
setValue(V value) ตั้งค่าใหม่ในคู่คีย์-ค่า

"การเข้าสะดวกเพราะคุณสามารถส่งคู่ไปยังวิธีการโดยไม่ต้องผ่านแผนที่ทั้งหมด"

"ฉันเห็น."

"ตอนนี้ฉันจะพูดถึงการใช้งานแผนที่"

"อันดับแรกคือHashMapซึ่งใช้ตารางแฮชในการจัดเก็บองค์ประกอบ คีย์และค่าสามารถเป็นประเภทใดก็ได้ เช่นเดียวกับค่าว่างลำดับขององค์ประกอบสามารถเปลี่ยนแปลงได้เมื่อคอลเลกชันเปลี่ยนแปลง "

"องค์ประกอบถูกจัดเก็บไว้ใน HashMap เป็นชุดของกลุ่มหรือที่เก็บข้อมูล วิธีการ hashCode() ขององค์ประกอบจะกำหนดว่าองค์ประกอบนั้นอยู่ในที่เก็บข้อมูลใด"

"พูดอย่างคร่าว ๆ องค์ประกอบที่มีรหัสแฮชตั้งแต่ 1 ถึง 100 จะอยู่ในบัคเก็ตแรก ส่วนที่มีค่าตั้งแต่ 101 ถึง 200 จะอยู่ในบัคเก็ตที่สอง และอื่น ๆ"

"จุดประสงค์ของการจัดเก็บองค์ประกอบด้วยวิธีนี้คือ เราสามารถกำจัดองค์ประกอบทั้งหมดในบัคเก็ตที่ไม่เกี่ยวข้องเมื่อค้นหาหรือลบองค์ประกอบ"

"ฉันเห็น."

"มีบทความดีๆ เกี่ยวกับ HashMap ฉันขอแนะนำให้คุณอ่าน: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"คอลเลกชันที่สองคือLinkedHashMapความแตกต่างที่สำคัญจาก HashMap ก็คือมันยังจัดเก็บรายการเป็นรายการที่เชื่อมโยง ใน HashMap ทั่วไป ลำดับขององค์ประกอบจะไม่ถูกกำหนดและอาจเปลี่ยนแปลงเมื่อเวลาผ่านไป และคุณสามารถรับตัววนซ้ำได้จาก LinkedHashMap และใช้เพื่ออธิบายองค์ประกอบทั้งหมดตามลำดับที่เพิ่มไปยัง LinkedHashMap นอกจากนี้ LinkedHashMap ยังมีตัววนซ้ำที่ให้คุณอธิบายคู่ทั้งหมดตามลำดับการใช้งาน/กิจกรรมล่าสุด"

"มีบทความที่ดีมากเกี่ยวกับ LinkedHashMap ไปที่: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"คอลเลกชันที่สามที่ฉันอยากจะพูดถึงในวันนี้คือTreeMap "

" TreeMapจัดเรียงองค์ประกอบตามลำดับจากน้อยไปหามาก สิ่งนี้ทำได้เนื่องจาก TreeMap ใช้ต้นไม้สีแดงดำที่สมดุลเพื่อจัดเก็บองค์ประกอบ"

"ด้วยเหตุนี้ เวลาในการแทรกและเวลาในการค้นหาจึงต่ำมาก คลาสนี้เป็นตัวเลือกที่ดีเมื่อใช้ข้อมูลจำนวนมาก"

"และแน่นอน เรามีบทความเกี่ยวกับทรีแมป: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

“ผมยังไม่ได้บอกอะไรคุณเลย?”

"WeakHashMap แต่ Rishi บอกฉันเกี่ยวกับเรื่องนี้เมื่อสองสามวันก่อน"

"เมื่อไหร่?"

"เมื่อเขาพูดถึง SoftReference, WeakReference และ PhantomReference"

“ฉันเชื่อคุณ เพราะคุณตั้งชื่อถูกทั้งหมดแล้ว ไปพักผ่อนเถอะ คืนนี้เจอกัน”

"ลาก่อน เอลลี่"