Tôi muốn tìm và tái sử dụng (nếu có thể) một việc thực hiện bản đồ trong đó có các thuộc tính sau:thích ứng Maps trong Scala (hoặc Java) Bảo tồn Insertion tự
Trong khi số lượng các mục nhỏ, nói < 32, lưu trữ cơ bản nên được thực hiện trong một mảng như thế này [key0, val0, key1, val1, ...] Sơ đồ lưu trữ này tránh nhiều đối tượng Entry nhỏ và cung cấp cho up nhìn rất nhanh (thậm chí tho họ quét tuần tự!) trên CPU hiện đại do bộ nhớ cache của CPU không bị vô hiệu và thiếu con trỏ gián tiếp vào heap.
Bản đồ nên duy trì trật tự chèn cho cặp khóa/giá trị không phụ thuộc vào số lượng các mục tương tự như LinkedHashMap
Chúng tôi đang làm việc trên một trong bộ nhớ cơ quan đại diện của rất lớn (hàng triệu nút/cạnh) các đồ thị trong Scala và có một Map như vậy sẽ cho phép chúng ta lưu trữ các thuộc tính Node/Edge cũng như Edges trên mỗi nút theo cách hiệu quả hơn cho 99% + các nút và các cạnh có ít thuộc tính hoặc hàng xóm trong khi vẫn giữ thứ tự chèn thời gian cho cả hai thuộc tính và cạnh.
Nếu có ai biết về bản đồ Scala hoặc Java với các đặc điểm như vậy, tôi sẽ có nhiều nghĩa vụ.
Thanx
Để tham khảo, tôi lưu ý rằng OP không tìm thấy giải pháp của tôi thỏa đáng và yêu cầu tôi xóa nó. Tóm lại, ý tưởng là đặt tất cả mọi thứ trong các mảng được lập chỉ mục, kiểu Fortran, nhưng sau đó viết các trình bao bọc đẹp xung quanh cấu trúc này để nó dễ chịu để giải quyết. Ưu điểm của phương pháp này là nó cực kỳ nhanh (do chủ yếu chỉ sử dụng nguyên thủy) và tự nhiên bảo tồn thứ tự chèn (vì bạn chỉ cần thêm 1 vào chỉ mục của mình khi bạn cần một mục nhập mới). Nhiều công việc đồ thị trong Fortran và C đã được thực hiện theo cách này, nhưng tôi đồng ý rằng tôi đã không xác định được bản đồ mong muốn. –
Vì bạn đã suy nghĩ về việc thực hiện, tại sao bạn không viết của riêng bạn? Nó không thể là khó để viết một wrapper xung quanh một mảng hoặc một LinkedHashMap. – starblue
Bạn đang sử dụng bộ sưu tập của mình cho một trường hợp đặc biệt. do đó bạn không nên bận tâm đến cách tiết kiệm như vậy. nó sẽ là thú vị để tạo ra datastrukture của riêng bạn, để có được một hiệu suất cao hơn. bạn có thể tối ưu hóa strukture của bạn cho trường hợp của bạn, bởi vì có vẻ như bạn biết rất nhiều đồ thị của bạn. vì vậy bạn nên suy nghĩ về cây cối, danh sách, bất cứ điều gì, để có được hiệu suất cao nhất có thể từ nó. có lẽ bạn sẽ có được hiệu suất runtine của O (n * logn) hoặc ít hơn ....;) –