"Và cuối cùng, tôi sẽ kể cho bạn nghe về Map."

"Bản đồ, như bạn biết, lưu trữ một tập hợp các cặp khóa-giá trị. Các khóa phải là duy nhất, nhưng các giá trị có thể là bất kỳ thứ gì. Nếu bạn thêm một cặp khóa-giá trị vào Bản đồ và bộ sưu tập đã chứa khóa, thì giá trị cũ sẽ được thay thế bằng giá trị mới. Nói cách khác, khóa đóng vai trò như một chỉ mục đặc biệt có thể là bất kỳ đối tượng nào ."

Bản đồ là một thuật ngữ toán học biểu thị một tập hợp các cặp (x, y), trong đó mỗi x duy nhất tương ứng với một số y.

Các lập trình viên rất thích Map, vì vậy ở đây chúng tôi trình bày 4 bộ sưu tập khác nhau triển khai giao diện Map:

"Đây là cấu trúc kế thừa đơn giản của nó:"

Phân cấp bản đồ - 1

"Màu vàng cho biết Mục nhập là một giao diện lồng nhau trong giao diện Bản đồ ."

"Mục nhập đã được thêm vào để mô tả một cặp phần tử dưới dạng một thực thể duy nhất."

"Đây là các phương thức của Map<K,V>:"

phương pháp Sự miêu tả
int size() Trả về số cặp trong bản đồ.
boolean isEmpty() Kiểm tra xem bản đồ có trống không.
boolean containsKey(Object key) Bản đồ có chứa khóa được chỉ định không?
boolean containsValue(Object value) Bản đồ có chứa giá trị được chỉ định không?
V get(Object key) Trả về giá trị cho khóa được chỉ định.
V put(K key, V value) Đặt giá trị mới cho khóa.
Phương thức trả về giá trị cũ hoặc null
putAll(Map<? extends K, ? extends V> m) Thêm các cặp từ bản đồ khác.
void clear() Xóa bản đồ, tức là xóa tất cả các cặp.
Set<K>keySet() Trả về một Tập hợp các phím.
Collection<V>values() Trả về một tập hợp các giá trị.
Set<Map.Entry<K, V>>entrySet() Trả về một Tập hợp các cặp.

"K và V là các tham số loại cho các khóa và giá trị."

"Chà, tôi quen thuộc với hầu hết các phương pháp, nhưng tôi chỉ làm việc với một số trong số chúng."

"Bạn có thể cho tôi biết điều gì khác về lớp Đầu vào?"

"Lớp này mô tả một cặp phần tử. Nó có một vài phương thức:"

phương pháp Sự miêu tả
getKey() Trả về khóa của cặp khóa-giá trị.
getValue() Trả về giá trị của cặp khóa-giá trị.
setValue(V value) Đặt giá trị mới trong cặp khóa-giá trị.

"Nhập cảnh thuận tiện vì bạn có thể chuyển một cặp cho một phương thức mà không cần chuyển toàn bộ bản đồ."

"Tôi hiểu rồi."

"Bây giờ tôi sẽ xem qua các triển khai Bản đồ."

"Đầu tiên là HashMap . Nó sử dụng bảng băm để lưu trữ các phần tử. Khóa và giá trị có thể thuộc bất kỳ loại nào, cũng như không. Thứ tự của các phần tử có thể thay đổi khi bộ sưu tập thay đổi ."

"Các phần tử được lưu trữ trong HashMap dưới dạng một tập hợp các nhóm hoặc nhóm. Phương thức hashCode() của một phần tử xác định phần tử đó rơi vào nhóm nào."

"Nói một cách đại khái, các phần tử có mã băm từ 1 đến 100 rơi vào nhóm đầu tiên, những phần tử có giá trị từ 101 đến 200 rơi vào nhóm thứ hai, v.v."

"Điểm lưu trữ các phần tử theo cách này là chúng tôi có thể loại bỏ tất cả các phần tử trong các nhóm không liên quan khi tìm kiếm hoặc xóa các phần tử."

"Tôi hiểu rồi."

"Có một bài viết rất hay về HashMap. Tôi khuyên bạn nên đọc nó: https://medium.com/@mr.anmolsehgal/java-hashmap-internal-implementation-21597e1efec3 "

"Bộ sưu tập thứ hai là LinkedHashMap . Điểm khác biệt chính của nó so với HashMap là nó cũng lưu trữ các mục dưới dạng danh sách được liên kết. Trong HashMap thông thường, thứ tự của các phần tử không được xác định và có thể thay đổi theo thời gian. Và bạn có thể lấy một trình vòng lặp từ LinkedHashMap và sử dụng nó để duyệt qua tất cả các phần tử theo thứ tự chúng được thêm vào LinkedHashMap. Ngoài ra, LinkedHashMap có một trình vòng lặp cho phép bạn duyệt qua tất cả các cặp theo thứ tự hoạt động/lần sử dụng cuối cùng."

"Có một bài viết thực sự hay về LinkedHashMap. Bạn xem tại đây: https://medium.com/@mr.anmolsehgal/java-linkedhashmap-internal-implementation-44e2e2893036 "

"Bộ sưu tập thứ ba tôi muốn nói đến hôm nay là TreeMap ."

" TreeMap giữ cho các phần tử của nó được sắp xếp theo thứ tự tăng dần. Điều này đạt được là do TreeMap sử dụng cây đỏ đen cân bằng để lưu trữ các phần tử."

"Kết quả là thời gian chèn và thời gian tìm kiếm rất thấp. Lớp này là lựa chọn tuyệt vời khi sử dụng lượng dữ liệu rất lớn."

"Và, tất nhiên, chúng tôi có một bài báo trên TreeMap: https://medium.com/xebia-engineering/treemap-internals-199e0e0050b5 "

"Ta còn chưa nói với ngươi cái gì?"

"WeakHashMap, nhưng Rishi đã nói với tôi về nó vài ngày trước."

"Đó là khi nào?"

"Khi anh ấy nói về SoftReference, WeakReference và PhantomReference."

"Tôi tin bạn, vì bạn đã đặt tên cho tất cả chúng một cách chính xác. Vậy thì hãy nghỉ ngơi đi. Hẹn gặp lại tối nay."

"Tạm biệt, Ellie."