“และสุดท้าย ฉันจะบอกคุณเกี่ยวกับแผนที่”
"อย่างที่คุณทราบ Map เก็บชุดของคู่คีย์-ค่าไว้ คีย์ต้องไม่ซ้ำกัน แต่ค่าสามารถเป็นอะไรก็ได้ หากคุณเพิ่มคู่คีย์-ค่าลงในแผนที่ และคอลเลกชันมีคีย์อยู่แล้ว ค่าเก่าจะถูกแทนที่ด้วยค่าใหม่ กล่าวอีกนัยหนึ่งคีย์ทำหน้าที่เหมือนดัชนีพิเศษที่สามารถเป็นวัตถุใดๆ ก็ได้ "
แผนที่เป็นคำศัพท์ทางคณิตศาสตร์ที่ใช้แทนเซตของคู่ (x, y) ซึ่ง x แต่ละตัวไม่ซ้ำกันจะสัมพันธ์กับ y บางตัว
โปรแกรมเมอร์ชื่นชอบ Map มาก เราจึงขอนำเสนอ 4 คอลเล็กชันที่แตกต่างกันที่ใช้อินเทอร์เฟซ Map:
"นี่คือโครงสร้างการสืบทอดอย่างง่าย:"
"สีเหลืองแสดงว่ารายการเป็นอินเทอร์เฟซที่ซ้อนกันใน อินเทอร์เฟซ แผนที่ "
"รายการถูกเพิ่มเพื่ออธิบายคู่องค์ประกอบเป็นเอนทิตีเดียว"
"นี่คือวิธีการของ 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 เป็นพารามิเตอร์ประเภทสำหรับคีย์และค่าต่างๆ"
"อืม ฉันคุ้นเคยกับวิธีการส่วนใหญ่ แต่ฉันเคยได้ผลกับบางวิธีเท่านั้น"
"คุณสามารถบอกอะไรฉันได้อีกเกี่ยวกับชั้นเรียนเริ่มต้น"
"คลาสนี้อธิบายองค์ประกอบคู่ มันมีไม่กี่วิธี:"
วิธีการ | คำอธิบาย |
---|---|
K getKey() |
ส่งกลับคีย์ของคู่คีย์-ค่า |
V getValue() |
ส่งกลับค่าของคู่คีย์-ค่า |
V 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"
“ฉันเชื่อคุณ เพราะคุณตั้งชื่อถูกทั้งหมดแล้ว ไปพักผ่อนเถอะ คืนนี้เจอกัน”
"ลาก่อน เอลลี่"
GO TO FULL VERSION