Có triển khai thực hiện lớp HashMap (hoặc giao diện Bản đồ) cho phép tôi sử dụng các hoạt động băm và thay thế tương đương ... Tương tự như cách bộ sưu tập cùng loại có thể được sắp xếp theo nhiều cách sử dụng Comparator trong Collections.sort (danh sách, bộ so sánh).Tùy chỉnh hashcode/bằng hoạt động cho HashMap
Tôi muốn tránh nếu có thể, tạo trình bao bọc khóa cung cấp các hoạt động hashcode và bằng mong muốn.
Trong trường hợp của tôi, một trong những kịch bản do tại sao tôi cần một cái gì đó như thế này:
Trong ứng dụng web của tôi, đối với mỗi yêu cầu, tôi nạp Location/ISP và các dữ liệu khác. Trong các phần khác nhau của mã (trong các lớp dịch vụ và kho lưu trữ của tôi), tôi có bộ nhớ cache "thu nhỏ" cụ thể theo yêu cầu của nó.
Đây là một mã số ví dụ đơn giản:
class GeoIpData{
private String countryName;
private String state;
private String city;
private String isp;
@Override
public int hashCode() {
//countryName hashCode
//state hashCode
//city hashCode
//isp hashCode
}
@Override
public boolean equals(Object obj) {
// compare countryName
// compare state
// compare city
// compare isp
}
}
Map<GeoIpData,#Type1> fullCache = ... //This cache needs to be unique per countryName,state,city and isp
Map<GeoIpData,#Type2> countryCache = ... //This cache needs to be unique per countryName
Map<GeoIpData,#Type2> ispCache = ... //This cache needs to be unique per countryName,isp
Để đạt được điều này 3 bản đồ trên cần 3 hashcode khác nhau và bằng phương pháp này.
fullCache:
hashCode -> GeoIpData.hashCode();
equals -> GeoIpData.equals(Object obj);
countryCache:
hashCode -> {countryName hashCode }
equals -> {compare countryName }
ispCache:
hashCode -> {countryName hashCode & isp hashCode }
equals -> {compare countryName & compare isp hashCode }
Xin chào "Noofz" Cảm ơn bạn đã tư vấn, hãy để tôi làm một số tiêu chuẩn trước ... Bạn đã sử dụng điều này trước đây, nếu bạn có, nó hoạt động như thế nào trong môi trường nhiều luồng? Hoạt động cache.get (...) được thực hiện từ 5.000 đến 30.000 lần mỗi giây và có thể tăng gấp đôi. – NeilA
Không, thật may là tôi không có kinh nghiệm sử dụng nó dưới một niềm vui lớn như vậy. – Mikhail
Chạy một vài thử nghiệm. Trove dường như chậm hơn một chút ... – NeilA