2010-03-03 43 views
5

Quyết định của Google có tương tự như quyết định cho SortedMultiSet(stackoverflow question) hoặc là vì không sử dụng MultiKeyMap?Tại sao Google Bộ sưu tập không hỗ trợ MultiKeyMap như Bộ sưu tập Apache?

Tôi biết rằng thay thế cho MultiKeyMap có thể là sử dụng Lớp tùy chỉnh làm khóa chứa nhiều khóa làm thành viên của lớp. Ngược lại, tôi thích khái niệm chỉ định nhiều phím khi gọi đến số MultiKeyMap.

Phiên bản Apache MultiKeyMap tuyệt vời nhưng tôi thiếu nghiêm trọng Generics và do đó đã xem Google Bộ sưu tập để triển khai hiện đại. Nếu ai đó có bất kỳ ý tưởng nào tại sao Google chưa hỗ trợ nó hoặc có một giải pháp thay thế tốt hơn cho nó thì vui lòng trả lời.

Trả lời

6

Chúng tôi có một bản đồ hai tầng rất đẹp, mà chúng tôi gọi là "bảng" (K1 là "khóa hàng" và K2 là "khóa cột") và chúng tôi chưa nhận được phát hành được nêu ra. Tuy nhiên, hai khóa trước đây là lợi nhuận giảm dần.

+2

tuyệt vời để có anh chàng google-bộ sưu tập chính thức đáp ứng :) Tôi có thể có một sneak đỉnh cao vào cấu trúc này 'bảng' dữ liệu? Và tại sao không có bản đồ 3 tầng và 4 tầng? –

+0

@ kevin-bourrillion bản đồ 2 tầng này đã được phát hành chưa? – Cat

+0

có, như câu trả lời được bỏ phiếu nhiều nhất ở đây chỉ ra. Câu trả lời của tôi không được chấp nhận. –

2

Tôi nghĩ rằng generics có thể là showstopper để triển khai ở đây. Nếu bạn chỉ xem giao diện Bản đồ, có các bộ định danh chung cho loại khóa (K) và loại giá trị (V). Tôi không tin rằng nó sẽ có thể xác định nó bằng cách sử dụng generics một cách dễ dàng mà không cần tách các triển khai thành nhiều lớp (một cho mỗi số thành phần chính).

Bạn sẽ cần một lớp cho mỗi:

MultiKeyMap2<K1,K2,V> 
MultiKeyMap3<K1,K2,K3,V> 
MultiKeyMap4<K1,K2,K3,K4,V> 
MultiKeyMap5<K1,K2,K3,K4,K5,V> 

Việc thực hiện cơ bản về cơ bản là làm những gì bạn đề nghị (sử dụng một lớp tùy chỉnh). Tuy nhiên, nó không chính thức tạo ra một lớp học cho nó, tất cả mọi thứ được inlined. Nó thực sự là một chi tiết thực hiện. Nhưng để sử dụng các bộ sưu tập của Google một lớp tùy chỉnh để thực hiện cùng một điều sẽ hoạt động nhiều theo cùng một cách tôi chắc chắn sẽ thực hiện hashCode() và equals().

9

FYI, câu trả lời được chấp nhận đã được trả lời vào tháng 3 năm 2010, nhưng tính đến tháng 9 năm 2010, ổi đã bao gồm Table.

+0

bạn có thể chỉnh sửa câu trả lời được chấp nhận với thông tin cập nhật bạn cung cấp ở đây không? –

+0

@MonisIqbal Bạn không được phép làm điều đó. Đây là [một bài đăng trong số nhiều bài viết về Meta về chủ đề này] (http://meta.stackoverflow.com/a/320293/1768232). Nếu bạn không thích câu trả lời được chấp nhận, hãy downvote nó. Nếu bạn làm như tôi, upvote nó, đó là những gì các nút được cho. Nhưng bạn không nên hoàn toàn chỉnh sửa nội dung câu trả lời của người khác, tính năng chỉnh sửa dành cho các cải tiến không thay đổi nội dung. – durron597

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