Có một kỹ thuật nào để tôi có thể chỉ định một số n sao cho khi mục nhập (n + 1) được chèn vào, mục cũ nhất được gỡ bỏ đầu tiên, đảm bảo rằng kích thước của hashtable luôn bị giới hạn ở n?Làm cách nào để hạn chế số lượng mục nhập trong java hashtable?
Trả lời
Bạn đang tìm kiếm một LRU cache có lẽ? Dưới đây là bài đăng trên blog dựa trên số LinkedHashMap.
Tôi đã đề cập đến LinkedHashMap, mà tôi đã sử dụng cho bộ nhớ cache LRU gần đây. –
Bạn có thể muốn xem xét sử dụng Bộ sưu tập Apache. Họ có một loạt các triển khai LRU. Nếu không, bạn có thể dễ dàng viết một trình bao bọc tương tự cho các bộ sưu tập thư viện chuẩn; Tôi không nghĩ rằng bạn có thể sử dụng trực tiếp.
Bạn có thể sử dụng hàng đợi có hai hàng hoặc Deque và chỉ xóa mục đầu tiên khi bạn đang ở số lượng tối đa.
Nếu bạn đang lưu vào bộ nhớ đệm, bạn có thể sử dụng WeakHashMap hoặc WeakReference và sau đó không phải lo lắng về kích thước của bộ nhớ cache.
Chỉ cần làm rõ để tránh tuyên truyền một quan niệm sai lầm phổ biến: WeakHashMap KHÔNG thích hợp cho bộ nhớ đệm LRU của chính nó; nó sử dụng WeakReferences cho KEYS, chứ không phải VALUES. Đó là lý tưởng để giữ siêu dữ liệu về các đối tượng không 'thuộc về' đối với bạn; không cho các mục nhập giả định sẽ bị loại bỏ khi hết bộ nhớ – Cowan
LinkedHashMap thực hiện chính xác điều đó, hãy xem javadoc cho phương pháp removeEldestEntry.
Something như thế này nên làm các trick, điều này sẽ loại bỏ các mục chèn lâu đời nhất:
Map map = new LinkedHashMap() {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
Bạn cũng có thể loại bỏ lâu đời nhất entry được truy cập bằng cách xác định nó trong các nhà xây dựng:
Map map = new LinkedHashMap(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Entry eldest) {
return size() > N;
}
};
Nếu bạn có nhu cầu đồng thời, đừng cố tự mình giải quyết vấn đề này. Phương thức của một số phương pháp .maximumSize() cho phép bạn giới hạn kích thước của bản đồ, mặc dù tôi hiểu rằng các mục cũ có thể được dọn sạch trước khi bạn thực sự đạt tới giới hạn.
Có an interesting page về thiết kế của cấu trúc dữ liệu, điều này sẽ gây ấn tượng với người đọc về mức độ khó thực hiện tốt hơn so với triển khai của Google. :)
- 1. Làm cách nào để hạn chế số lượng ký tự được nhập qua cin?
- 2. JTextField: Làm thế nào để hạn chế số lượng charaters?
- 3. Làm cách nào để hạn chế số lượng số thập phân được in cho gấp đôi?
- 4. Làm cách nào để hạn chế số lượng kết quả được trả lại trong Sybase?
- 5. Làm cách nào để hạn chế số lượng chuỗi hoạt động trong python?
- 6. Số lượng hạn chế giao dịch SQLite?
- 7. Làm thế nào để hạn chế số lượng các phần tử trong multifield trong CQ5?
- 8. Hạn chế nhập JTextField thành Số nguyên
- 9. Làm cách nào để giới hạn ô chỉ nhập số
- 10. Làm thế nào để hạn chế số dòng trong JTextArea?
- 11. Làm thế nào để hạn chế số lượng ô UITableview hiển thị?
- 12. Hashtable với phím số nguyên trong Java
- 13. Hibernate Tiêu chuẩn và số lượng hàng hạn chế
- 14. Làm cách nào để giới hạn số lượng ký tự được nhập trong hộp thoại cảnh báo EditText
- 15. Làm cách nào để hạn chế số lượng kết quả cho một biến cụ thể trong truy vấn SPARQL?
- 16. tải lên tệp jquery hạn chế số lượng tệp
- 17. Làm cách nào để giới hạn số lượng các chuỗi đồng thời trong Python?
- 18. Làm thế nào để hạn chế số ký tự nhập vào một vùng văn bản
- 19. Khi chạy, làm thế nào tôi có thể giới hạn số lượng các chủ đề java
- 20. Chọn số lượng mục nhập trong một mảng json
- 21. Làm cách nào để thay đổi số lượng tệp giới hạn mở trong Linux?
- 22. Làm thế nào để giới hạn số lượng các giá trị phân loại trong một bài Wordpress?
- 23. PreparedStatement.addBatch trong java có bất kỳ hạn chế nào không?
- 24. Làm cách nào để hạn chế tạo đối tượng không quá 3 trong lớp Java?
- 25. Làm cách nào để hạn chế loại tệp có loại tệp nhập HTML?
- 26. Làm cách nào để giới hạn số lần đăng nhập lại ở Django
- 27. số Hạn chế đầu vào JTextField
- 28. Làm cách nào để đặt số lượng mục trong menu bộ đệm chuột trong Emacs?
- 29. Sao chép danh sách java có giới hạn mục nhập
- 30. Đa xử lý Python: làm cách nào để giới hạn số lượng quy trình chờ?
Điều này tương tự như http://stackoverflow.com/questions/272674/what-is-a-data-structure-kind-of-like-a-hash-table-but-infrequently-used-keys -ar. Câu hỏi cung cấp một giải pháp. –
@robhruska - bạn có nghĩ điều này được tính là trùng lặp không? Tôi đang ở trên hàng rào. –
Tôi không chắc chắn. Các quan điểm có một chút khác biệt, vì câu hỏi này hỏi về "giới hạn kích thước" trong khi câu hỏi khác nhắm mục tiêu "các mục nhập không thường xuyên được sử dụng". Tôi không phản đối việc mở nó ra, nếu chỉ để có thêm khả năng tìm kiếm cho những người nhìn nó từ góc độ của câu hỏi này. –