LinkedHashMap ใน Java คืออะไร
คลาสLinkedHashMapของเฟรมเวิร์ก Collections คือ การใช้งาน HashtableและLinkedListของอินเทอร์เฟซMap โดยจะจัดเก็บรายการไว้ในHashtableและใช้รายการที่เชื่อมโยงแบบทวีคูณภายในเพื่อรักษาลำดับการแทรก LinkedList นี้กำหนดลำดับการ แทรกซึ่งเป็นลำดับที่คีย์ถูกแทรกลงในMap HashMap ให้ประโยชน์ของการแทรกการค้นหาและการลบ อย่าง รวดเร็วแต่ในLinkedHashMapการใช้งานLinkedListจะรักษาลำดับการแทรกไว้เช่นกัน
คุณสมบัติของ LinkedHashMap
- มันมีค่าตามคีย์
- มันมีองค์ประกอบที่เป็นเอกลักษณ์
- อาจมีคีย์ Null หนึ่งคีย์และค่า Null หลายค่า
- มันไม่ซิงโครไนซ์
- จะรักษาลำดับการแทรกซึ่งทำให้การวนซ้ำมีราคาแพงกว่า
ปัจจัยด้านประสิทธิภาพ
ประสิทธิภาพของLinkedHashMapขึ้นอยู่กับปัจจัยสองประการหลักซึ่งอธิบายไว้ด้านล่างนี้ความจุ
ความจุหมายถึงจำนวนรายการที่สามารถจัดเก็บได้ ความจุเริ่มต้นคือ16หากไม่มีการระบุพารามิเตอร์ ตัวประกอบการโหลด หมายถึงเมื่อใดก็ตามที่HashMapถูกเติมตามเปอร์เซ็นต์ที่ระบุที่ระบุเป็นพารามิเตอร์ HashMap ใหม่จะถูกสร้างขึ้นซึ่งมีขนาดใหญ่เป็นสองเท่า และรายการทั้งหมดจะถูกย้ายไปยังรายการใหม่นี้ ปัจจัยการโหลดเริ่มต้นสำหรับ HashMap คือ0.75 เรียกอีกอย่างว่าอัตราส่วน การเติมประกาศของ LinkedHashMap
ในการสร้างLinkedHashMap ก่อน อื่น เราต้องนำเข้าแพ็คเกจซึ่งก็คือjava.util.LinkedHashMapLinkedHashMap<Key, Value> lhm = new LinkedHashMap<>(12, 0.5f);
ในที่นี้ Keyคือประเภทของกุญแจในแผนที่ ค่าคือประเภทของค่าที่แมปในแผนที่ 12คือความจุซึ่งหมายความว่าจะจัดเก็บ 12 รายการในแผนที่ 0.5fคือปัจจัยการโหลด ซึ่งหมายความว่าเมื่อมีการเติม 50% มันจะสร้างแผนที่ ใหม่ และย้ายค่าทั้งหมดไปยังแผนที่ใหม่นี้
วิธีการทั่วไปของ LinkedHashMap
นี่คือรายการวิธีการทั่วไปบางอย่างของ LinkedHashMapวิธีการ | คำอธิบาย |
---|---|
ชัดเจน() | ลบการแมปทั้งหมดในแผนที่ |
มีค่า (ค่าวัตถุ) | คืนค่าเป็นจริงหากแผนที่จับคู่คีย์กับค่าที่ระบุ |
รายการชุด() | ส่งกลับมุมมองการตั้งค่าของการแมปในแผนที่ |
รับ (คีย์วัตถุ) | ส่งกลับค่าตามคีย์ที่ระบุหรือค่า null หากไม่มีการระบุคีย์ |
ชุดคีย์() | ส่งคืนมุมมอง Set ของปุ่มต่างๆ ในแผนที่ |
ค่า() | ส่งกลับมุมมองคอลเลกชันของค่าในแผนที่ |
getOrDefault (คีย์วัตถุ, V defaultValue) | ส่งกลับค่าที่เชื่อมโยงกับคีย์ที่ระบุหรือ defaultValue หากไม่มีการเชื่อมโยงคีย์ |
ตัวอย่าง LinkedHasMap
import java.util.LinkedHashMap;
class Main {
public static void main(String[] args) {
// Creating a LinkedHashMap of odd numbers
LinkedHashMap<String, Integer> oddNumbers = new LinkedHashMap<>();
// Using the put() method
oddNumbers.put("One", 1);
oddNumbers.put("Three", 3);
System.out.println("LinkedHashMap1: " + oddNumbers);
// Creating another LinkedHashMap
LinkedHashMap<String, Integer> numbers = new LinkedHashMap<>();
numbers.put("Two", 2);
// Using putAll() method
numbers.putAll(oddNumbers);
System.out.println("LinkedHashMap2: " + numbers);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
// Using keySet() method
System.out.println("Keys: " + numbers.keySet());
// Using values() method
System.out.println("Values: " + numbers.values());
// Using get() method
int value1 = numbers.get("Three");
System.out.println("Returned Number: " + value1);
// Using getOrDefault() method
int value2 = numbers.getOrDefault("Five", 5);
System.out.println("Returned Number: " + value2);
// Using remove() method
int value = numbers.remove("Two");
System.out.println("Removed value: " + value);
// Using entrySet() method
System.out.println("Key/Value mappings: " + numbers.entrySet());
}
}
เอาท์พุต
LinkedHashMap1: {หนึ่ง=1, สาม=3} LinkedHashMap2: {สอง=2, หนึ่ง=1, สาม=3} การแมปคีย์/ค่า: [สอง=2, หนึ่ง=1, สาม=3] คีย์: [สอง หนึ่ง , สาม] ค่า: [2, 1, 3] หมายเลขที่ส่งคืน: 3 หมายเลขที่ส่งคืน: 5 ค่าที่ลบออก: 2 การแมปคีย์/ค่า: [หนึ่ง=1, สาม=3]
LinkedHashMap กับ HashMap
เรามาดูความแตกต่างระหว่างพวกเขาบ้าง ในขณะที่ทั้งคู่ใช้อินเทอร์เฟซแผนที่- LinkedHashMapรักษาลำดับการแทรกในขณะที่ใช้รายการที่เชื่อมโยงแบบทวีคูณภายใน
- LinkedHashMap ต้องการพื้นที่เก็บข้อมูล เพิ่มเนื่องจากใช้งานLinkedList
- ใน ด้านประสิทธิภาพLinkedHashMapจะช้ากว่าHashMap
GO TO FULL VERSION