Java LinkedHashMap

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về lớp Java LinkedHashMap và các hoạt động của nó với sự trợ giúp của các ví dụ.

Các LinkedHashMaplớp học của khuôn khổ bộ sưu tập Java cung cấp các bảng băm và liên kết thực hiện danh sách các giao diện bản đồ.

Các LinkedHashMapgiao diện mở rộng lớp HashMap để lưu trữ các mục của nó trong một bảng băm. Nó duy trì nội bộ một danh sách được liên kết kép giữa tất cả các mục nhập của nó để sắp xếp các mục nhập của nó.

Tạo một LinkedHashMap

Để tạo một hashmap được liên kết, java.util.LinkedHashMaptrước tiên chúng ta phải nhập gói. Khi chúng tôi nhập gói, đây là cách chúng tôi có thể tạo các bản đồ băm được liên kết trong Java.

 // LinkedHashMap with initial capacity 8 and load factor 0.6 LinkedHashMap numbers = new LinkedHashMap(8, 0.6f); 

Trong đoạn mã trên, chúng tôi đã tạo một bản đồ băm được liên kết có tên là các số.

Đây,

  • Khóa - một số nhận dạng duy nhất được sử dụng để liên kết từng phần tử (giá trị) trong bản đồ
  • Giá trị - các yếu tố được liên kết bởi các khóa trong bản đồ

Chú ý phần new LinkedHashMap(8, 0.6). Ở đây, tham số đầu tiên là dung lượng và tham số thứ hai là loadFactor .

  • Dung lượng - Dung lượng của hashmap được liên kết này là 8. Có nghĩa là, nó có thể lưu trữ 8 mục nhập.
  • loadFactor - Hệ số tải của bản đồ băm được liên kết này là 0,6. Điều này có nghĩa là, bất cứ khi nào bản đồ băm của chúng tôi được lấp đầy 60%, các mục nhập sẽ được chuyển sang một bảng băm mới có kích thước gấp đôi kích thước của bảng băm ban đầu.

Công suất mặc định và hệ số tải

Có thể tạo một hashmap được liên kết mà không cần xác định dung lượng và hệ số tải của nó. Ví dụ,

 //LinkedHashMap with default capacity and load factor LinkedHashMap numbers1 = new LinkedHashMap(); 

Theo mặc định,

  • dung lượng của hashmap được liên kết sẽ là 16
  • hệ số tải sẽ là 0,75

Lưu ý : LinkedHashMapLớp cũng cho phép chúng ta xác định thứ tự của các mục nhập của nó. Ví dụ

 // LinkedHashMap with specified order LinkedHashMap numbers2 = new LinkedHashMap(capacity, loadFactor, accessOrder); 

Ở đây, accessOrder là một giá trị boolean. Giá trị mặc định của nó là false. Trong trường hợp này, các mục nhập trong bản đồ băm được liên kết được sắp xếp dựa trên thứ tự chèn của chúng.

Tuy nhiên, nếu trueđược chuyển dưới dạng accessOrder, các mục nhập trong bản đồ băm được liên kết sẽ được sắp xếp từ lượt truy cập gần đây nhất đến lượt truy cập gần đây nhất.

Tạo LinkedHashMap từ các Bản đồ khác

Đây là cách chúng ta có thể tạo một bản đồ băm được liên kết chứa tất cả các phần tử của các bản đồ khác.

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating a LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("LinkedHashMap1: " + evenNumbers); // Creating a LinkedHashMap from other LinkedHashMap LinkedHashMap numbers = new LinkedHashMap(evenNumbers); numbers.put("Three", 3); System.out.println("LinkedHashMap2: " + numbers); ) ) 

Đầu ra

 LinkedHashMap1: (Hai = 2, Bốn = 4) LinkedHashMap2: (Hai = 2, Bốn = 4, Ba = 3) 

Phương thức của LinkedHashMap

Các LinkedHashMaplớp học cung cấp phương pháp đó cho phép chúng tôi thực hiện các hoạt động khác nhau trên bản đồ.

Chèn các phần tử vào LinkedHashMap

  • put() - chèn ánh xạ khóa / giá trị được chỉ định vào bản đồ
  • putAll() - chèn tất cả các mục từ bản đồ được chỉ định vào bản đồ này
  • putIfAbsent() - chèn ánh xạ khóa / giá trị được chỉ định vào bản đồ nếu khóa được chỉ định không có trong bản đồ

Ví dụ,

  import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( // Creating LinkedHashMap of even numbers LinkedHashMap evenNumbers = new LinkedHashMap(); // Using put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); System.out.println("Original LinkedHashMap: " + evenNumbers); // Using putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("Updated LinkedHashMap(): " + evenNumbers); //Creating LinkedHashMap of numbers LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); // Using putAll() numbers.putAll(evenNumbers); System.out.println("New LinkedHashMap: " + numbers); ) ) 

Đầu ra

 Bản đồ liên kết gốc: (Hai = 2, Bốn = 4) Bản đồ liên kết được cập nhật: (Hai = 2, Bốn = 4, Sáu = 6) Bản đồ liên kết mới: (Một = 1, Hai = 2, Bốn = 4, Sáu = 6) 

Truy cập các phần tử LinkedHashMap

1. Sử dụng entrySet (), keySet () và các giá trị ()

  • entrySet() - trả về một tập hợp tất cả ánh xạ khóa / giá trị của bản đồ
  • keySet() - trả về một tập hợp tất cả các khóa của bản đồ
  • values() - trả về một tập hợp tất cả các giá trị của bản đồ

Ví dụ,

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) ) 

Đầu ra

 LinkedHashMap: (Một = 1, Hai = 2, Ba = 3) Ánh xạ khóa / giá trị: (Một = 1, Hai = 2, Ba = 3) Khóa: (Một, Hai, Ba) Giá trị: (1, 2, 3 ) 

2. Sử dụng get () và getOrDefault ()

  • get()- Trả về giá trị được liên kết với khóa được chỉ định. Nếu không tìm thấy chìa khóa, nó sẽ trả về null.
  • getOrDefault()- Trả về giá trị được liên kết với khóa được chỉ định. Nếu không tìm thấy khóa, nó sẽ trả về giá trị mặc định được chỉ định.

Ví dụ,

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // Using get() int value1 = numbers.get("Three"); System.out.println("Returned Number: " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Returned Number: " + value2); ) ) 

Đầu ra

 LinkedHashMap: (Một = 1, Hai = 2, Ba = 3) Số trả về: 3 Số trả về: 5 

Đã xóa phần tử bản đồ liên kết

  • remove(key) - trả về và xóa mục nhập được liên kết với khóa được chỉ định khỏi bản đồ
  • remove(key, value) - chỉ xóa mục nhập khỏi bản đồ nếu khóa được chỉ định được ánh xạ thành giá trị được chỉ định và trả về giá trị boolean

Ví dụ,

 import java.util.LinkedHashMap; class Main ( public static void main(String() args) ( LinkedHashMap numbers = new LinkedHashMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("LinkedHashMap: " + numbers); // remove method with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // remove method with two parameters boolean result = numbers.remove("Three", 3); System.out.println("Is the entry Three removed? " + result); System.out.println("Updated LinkedHashMap: " + numbers); ) ) 

Đầu ra

LinkedHashMap: (Một = 1, Hai = 2, Ba = 3) Giá trị bị xóa: 2 Mục nhập (Ba = 3) có bị xóa không? Bản đồ liên kết được cập nhật đích thực: (Một = 1)

Các phương thức khác của LinkedHashMap

phương pháp Sự miêu tả
clear() xóa tất cả các mục khỏi bản đồ
containsKey() kiểm tra xem bản đồ có chứa khóa được chỉ định hay không và trả về giá trị boolean
containsValue() kiểm tra xem bản đồ có chứa giá trị được chỉ định hay không và trả về giá trị boolean
size() trả về kích thước của bản đồ
isEmpty() kiểm tra xem bản đồ có trống không và trả về giá trị boolean

LinkedHashMap Vs. Bản đồ băm

Cả cái LinkedHashMapvà cái đều HashMaptriển khai Mapgiao diện. Tuy nhiên, tồn tại một số khác biệt giữa chúng.

  • LinkedHashMapduy trì một danh sách được liên kết kép trong nội bộ. Do đó, nó duy trì thứ tự chèn của các phần tử của nó.
  • Các LinkedHashMaplớp học đòi hỏi lưu trữ lớn hơn HashMap. Điều này là do LinkedHashMapduy trì danh sách liên kết trong nội bộ.
  • Hiệu suất của LinkedHashMaplà chậm hơn HashMap.

thú vị bài viết...