Tôi có một nhiệm vụ, nơi tôi đã phải trải qua vài tỷ dòng chuỗi và kiểm tra xem mỗi chuỗi có duy nhất hay không. Tất cả các dòng chính họ không thể được cung cấp trong bộ nhớ RAM của PC. Ngoài ra, số lượng dòng có thể lớn hơn Integer.MAX_VALUE.Xử lý các danh sách Chuỗi lớn trong java
Tôi giả định rằng cách tốt nhất để xử lý lượng dữ liệu này là đặt mã băm của từng chuỗi vào một số loại HashTable.
Vì vậy, đây là những câu hỏi của tôi:
- Tôi nên sử dụng thay vì
String.hashCode()
? (giá trị trả về là int, nhưng có lẽ tôi sẽ cần lâu) - Cách/khung làm việc nhanh nhất để làm việc với danh sách kích thước này là gì? Những gì tôi chủ yếu cần là khả năng nhanh chóng kiểm tra xem danh sách có chứa phần tử hay không
Tại sao không tận dụng sức mạnh của cơ sở dữ liệu? Liệu nó cần phải được thực hiện nghiêm ngặt trong java? –
Nếu đó là một lựa chọn, ý tưởng "cơ sở dữ liệu" là rất tốt. Ngoài ra, bạn sẽ cần phải xem xét hai "trường hợp xấu nhất": a) trong đó mỗi chuỗi là duy nhất, một b) trong đó mỗi chuỗi giống hệt nhau. Dù bạn có giải pháp nào, bạn có dung lượng đĩa/RAM và mã lực thời gian/tính toán để xử lý cả hai trường hợp không? – paulsm4
Số lượng dòng có thể lớn đến mức nào? Tôi biết lớn hơn MAX_VALUE - lớn hơn 32 * MAX_VALUE? To hơn...? –