2010-06-18 73 views
10

KHUYẾN CÁO:
Câu hỏi này không có ý nghĩa tranh cãi!Cách nhanh nhất và hiệu quả nhất để tìm kiếm cặp khóa-giá trị trong Java?

Cách thoát nước nhanh nhất và ít bộ nhớ nhất để tìm kiếm cặp khóa-giá trị là gì? Tôi sẽ lưu trữ các mục trong một khóa-giá trị như quan hệ và tôi cần truy cập chúng một cách nhanh chóng. Tôi có nên sử dụng cơ sở dữ liệu SQLite không? Bản đồ? Một Hashtable? Một HashMap? Vui lòng đưa ra một số ưu điểm/nhược điểm khi sử dụng bất kỳ phương pháp tìm kiếm nào.

Trả lời

11

Cấu trúc Map dựa trên băm là cách để đi miễn là hash function cho khóa này hiệu quả. Bạn có thể sử dụng id giá trị: s làm kết quả tra cứu để tiết kiệm bộ nhớ trong khi tìm kiếm.

Nếu dữ liệu của bạn đã có trong cơ sở dữ liệu, bạn có thể để toàn bộ tìm kiếm này với RDBMS, sau khi tất cả chúng được tạo ra cho công cụ này.

7

Nếu dữ liệu của bạn có trong bộ nhớ, Map s nói chung là bạn bè của bạn - chúng có nghĩa là cho việc này.

Tuy nhiên, đừng sử dụng Hashtable. Nó chậm hơn nhiều so với việc triển khai Bản đồ mới hơn. bởi vì các phương pháp của nó được đồng bộ, hầu hết thời gian là không cần thiết (và khi cần thiết, có một lựa chọn tốt hơn nhiều - xem bên dưới).

Trong ngữ cảnh một luồng, HashMap có thể sẽ ổn.

Nếu bạn cần an toàn chỉ, hãy sử dụng ConcurrentHashMap.

+0

HashTable KHÔNG được đồng bộ hóa và nhanh hơn ConcurrentHashMap trong môi trường đơn luồng trong khi nó không có bất kỳ khóa nào! Nếu quyền truy cập vào bản đồ đa luồng ConcurrentHashMap thực sự là giải pháp tốt nhất. –

+0

@Tobias, "Không giống như triển khai bộ sưu tập mới, Hashtable được đồng bộ hóa" - từ http://java.sun.com/j2se/1.5.0/docs/api/java/util/Hashtable.html –

+1

Vì chúng ta đang nói về ngữ nghĩa ... "Việc triển khai ConcurrentHashMap' thực hiện tốt hơn' HashMap' trong hầu hết các tình huống. Nó cũng cho phép đọc đồng thời và ghi đồng thời, và nó có các phương thức hỗ trợ các hoạt động tổng hợp chung mà không phải là luồng an toàn. môi trường triển khai, bắt đầu bằng 'ConcurrentHashMap'." * Clean Code - Cẩm nang về nghề thủ công phần mềm nhanh nhẹn, Robert C. Martin, tr.183 * – Esko

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