(Có một số câu hỏi về mảng thưa thớt tiết kiệm thời gian nhưng tôi đang tìm kiếm hiệu quả bộ nhớ.)Memory hiệu quả trong Java
Tôi cần tương đương với một List<T>
hoặc Map<Integer,T>
mà
- Có thể phát triển theo yêu cầu chỉ bằng cách đặt một khóa lớn hơn bất kỳ khóa nào trước đây. (Có thể giả sử các phím không âm).
- Hiệu quả bộ nhớ là
ArrayList<T>
trong trường hợp hầu hết các chỉ mục không phải lànull
, tức là khi dữ liệu thực tế không quá thưa thớt. - Khi chỉ số thưa thớt, hãy sử dụng không gian tỷ lệ thuận với số không chỉ số
null
. - Sử dụng ít bộ nhớ hơn
HashMap<Integer,T>
(vì điều này sẽ tự động khóa các phím và có thể không tận dụng loại khóa vô hướng). - Có thể nhận hoặc đặt thành phần trong thời gian nhật ký được phân bổ (N) khi N là số mục nhập: không cần phải là thời gian tuyến tính, tìm kiếm nhị phân sẽ được chấp nhận.
- Được thực hiện trong thư viện Java thuần túy mã nguồn mở không phải là virus (tốt nhất là ở Trung tâm Maven).
Có ai biết lớp tiện ích như vậy không?
Tôi đã mong đợi Bộ sưu tập của Commons có một bộ sưu tập nhưng dường như không có.
Tôi đã xem qua số org.apache.commons.math.util.OpenIntToFieldHashMap
trông gần như đúng, ngoại trừ loại giá trị là FieldElement
có vẻ không phù hợp; Tôi chỉ muốn T extends Object
. Dường như nó sẽ dễ dàng để chỉnh sửa mã nguồn của nó để được chung chung hơn, mặc dù tôi thà sử dụng một phụ thuộc nhị phân nếu có sẵn.
Điều đó có vẻ tốt. Tôi đã thử điều chỉnh 'OpenIntToFieldHashMap' thành một kiểu giá trị chung, có vẻ như đã làm việc với ~ 10min, nhưng nó chỉ hoạt động tốt hơn so với' TIntObjectMap'. –