Tôi biết đó là câu hỏi cũ nhưng có lẽ ai đó có thể thêm ý tưởng khác.
NB: Sau đây sẽ chỉ thực sự có ý nghĩa cho một tập hợp con cụ thể của trường hợp sử dụng:
Nếu yêu cầu bao gồm cao chồng chéo bộ phím (trong trường hợp cực đoan cùng một bộ chìa khóa cho tất cả các bản đồ) sau đó, rất giải pháp hiệu quả có thể là "ngoại giao" các khóa liên quan đến bản đồ và có bản đồ chỉ chứa các giá trị, trong một mảng.
Việc triển khai không nên phụ thuộc "cấu trúc" vào yếu tố trùng lặp, nhưng tôi thực hiện tốt hơn khi các phím chồng lên nhau nhiều hơn. Như bạn đã mong đợi.
Tôi không thể cung cấp chi tiết chính xác về việc triển khai, nhưng điều quan trọng là phải có cơ chế dịch phím (lưu trữ bên ngoài đối tượng bản đồ) của bạn thành chỉ mục vào mảng giá trị, đồng thời cho phép mảng giá trị ở lại nhỏ gọn, tức là có chiều dài năm nếu bản đồ của bạn chứa năm ánh xạ.
Nói các phím cho tất cả các bản đồ như vậy nằm trong một bản đồ riêng biệt, được ánh xạ tới số. Sau đó, nó là một vấn đề của việc có một cách liên quan đến các con số và các chỉ số mảng.
Xin lỗi nếu điều này không đủ cụ thể nhưng tôi nghĩ ý tưởng thú vị và đơn giản cùng một lúc và có thể được sử dụng như một hướng thay thế trong việc phát triển một bản đồ hiệu quả về bộ nhớ.
Một lần nữa, nó vốn phù hợp với trường hợp sử dụng "chồng chéo khóa" cao, nhưng bản thân nó là chung chung. Cũng có thể gặp vấn đề về hiệu suất nếu chồng chéo quá thấp, tùy thuộc vào chi tiết triển khai.
Tôi không nghĩ rằng một Bản đồ dựa trên danh sách được liên kết sẽ là "nhỏ nhất". Tôi muốn tạo một mảng dựa trên không có các đối tượng Entry (tức là các giá trị được lưu trữ trực tiếp trong mảng). Điều này có nghĩa là va chạm sẽ trở nên khó chịu, nhưng có nhiều cách để giải quyết vấn đề này. –
Tuần trước tôi đã thực hiện chính xác Bản đồ này (vì vậy bạn không đơn độc với nhu cầu của mình). Thật không may, việc triển khai không phải là mã nguồn mở. Tôi quản lý để giảm kích thước yêu cầu của bản đồ xuống 16 (đối với đối tượng bản đồ) + 16 (đối với mảng; làm tròn) + 8 * 'size' (cho nội dung mảng). Đó là mức sử dụng bộ nhớ thấp nhất bạn có thể nhận được, trừ khi bạn muốn hoạt động trực tiếp trên mảng chỉ bằng cách sử dụng các phương thức tĩnh, điều này sẽ giúp bạn tiết kiệm được 16 byte cho mỗi bản đồ. Nhưng trong trường hợp đó, nó sẽ không thể thực hiện giao diện 'Map' nữa. –