2013-02-01 28 views
14

Tôi có một số mã với các đối tượng Map<String, Map<String, String>>, hoạt động (nó được khởi tạo dưới dạng HashMap của HashMaps), nhưng tôi tự hỏi liệu có cách nào tốt hơn để biểu diễn cấu trúc dữ liệu này trong ổi.Bản đồ trong Guava

Tôi đã xem xét Multimap, nhưng trong khi có ListMultimapSetMultimap ở ổi, tôi đã không tìm thấy "MapMultimap".

Tôi cũng đã kiểm tra Table, dường như giống nó hơn, nhưng tên của nó khiến tôi không thoải mái: những gì tôi có chắc chắn không phải là một cái bàn mà là một cái cây. (Không có sự chồng chéo giữa các phím thứ hai)

Có phương án thay thế ổi tốt hơn hay tôi nên gắn bó với Map<String, Map<String, String>>?

+1

Bản đồ bên trong trông như thế nào? Điều gì về việc thay thế nó bằng một lớp thích hợp, vì vậy bạn sẽ có một 'Map ' thay thế? –

+0

@Philipp Reichart: Sau đó, SomeObject của tôi cần phải có một bản đồ nội bộ, vì vậy tôi không thấy mã của tôi sẽ trở nên đơn giản như thế nào nữa ... – WannaKnow

+1

Đó là lý do tại sao tôi hỏi các Sơ đồ bên trong trông như thế nào: Nếu tất cả chúng đều có cùng khóa (ví dụ '' firstName "', '" lastName "', ...), bạn có thể thay thế chúng bằng các cá thể của một lớp như 'Person {String firstName; String lastName; ...} '. Nếu mọi Bản đồ bên trong là khác nhau, điều này tất nhiên sẽ không hoạt động. –

Trả lời

23

Table có vẻ rất phù hợp với nhu cầu của bạn. Nhưng hãy đảm bảo bạn chọn triển khai đúng. Đặc biệt, nếu các khóa thứ hai của bạn là tất cả khác nhau (các cột trong bảng) bảng kết quả sẽ thưa thớt và bạn nên tính đến điều đó để quản lý việc sử dụng bộ nhớ.

Vì vậy, bạn nên tránh ArrayTable, nhưng có thể sử dụng bất kỳ triển khai nào khác. Lưu ý rằng docs đề cập rằng ImmutableTable đã triển khai tối ưu hóa cho bộ dữ liệu thô hơn và đậm đặc hơn.

Nếu Table của bạn được xây dựng cùng một lúc, bạn có thể sử dụng ImmutableTable.Builder và hưởng lợi từ tối ưu hóa này cũng như đơn giản hóa cuộc sống của bạn nếu bảng được chia sẻ giữa nhiều chủ đề.

12

Hãy xem giao diện Table của ổi.

documentation dụ dường như chồng lên nhau khá nhiều với việc sử dụng hợp cụ thể của bạn:

Thông thường, khi bạn đang cố gắng để chỉ mục trên nhiều hơn một khóa tại một thời điểm , bạn sẽ gió lên với một cái gì đó như Bản đồ < FirstName, Bản đồ < Họ, Người > >, rất xấu và khó xử khi sử dụng. Guava cung cấp loại bộ sưu tập mới, Bảng, hỗ trợ trường hợp sử dụng này đối với mọi loại "hàng" và loại "cột".

Các vấn đề liên quan