2013-03-15 30 views

Trả lời

4

Nhóm thực hiện cho Java Chuỗi hằng số là một cái gì đó được biết đến với trình biên dịch Java, vì vậy bạn không thể bắt chước hành vi chính xác của chính mình.

Bản thân hồ bơi không có gì khác ngoài bản đồ băm. Nếu đối tượng của bạn có một định danh phù hợp, bạn có thể cuộn một nhóm cho các đối tượng của riêng bạn: chỉ cần tạo một phương thức tĩnh lấy một khóa, tìm nó trong một bản đồ băm tĩnh và xây dựng một đối tượng mới chỉ khi nó chưa được gộp chung chưa. Tuy nhiên, lưu ý rằng trong orde cho lược đồ đơn giản này để làm việc, điều cần thiết cho đối tượng của bạn là không thay đổi.

+0

vì vậy về cơ bản duy trì một HashMap tĩnh sẽ nhân rộng tính gộp chung. đúng? và điều đó có nghĩa là ít hơn số lượng các trường trong bộ đệm, loại hiệu quả/hiệu quả hơn trong bộ nhớ đệm sẽ là? – Ankit

+1

@ ay89 Nói chung, việc tổng hợp sẽ chỉ hiệu quả khi có nhiều sự trùng lặp giữa các đối tượng mà bạn tạo ra. Bạn có thể có một đối tượng với 30 trường đại diện cho một khách hàng, cùng với địa chỉ, số điện thoại, v.v. Nếu bạn chỉ có 100 khách hàng, việc gộp nhóm của bạn sẽ rất hiệu quả ngay cả với các lớp có nhiều trường. Mặt khác, nếu bạn thử các lớp gộp đại diện cho các tọa độ theo 2D (cặp số nguyên) và sử dụng nó trên một tập hợp 10.000 tọa độ được tạo ngẫu nhiên, bộ nhớ đệm sẽ không hiệu quả chút nào, mặc dù chỉ có hai trường. – dasblinkenlight

+0

ok, nhưng nếu có nhiều đối tượng trùng lặp của số trường lớn hơn, việc gộp nhóm sẽ hiệu quả về mặt bộ nhớ. nhưng đồng thời, tôi nghĩ rằng, nó sẽ tiêu tốn nhiều thời gian hơn, so sánh số lượng trường lớn hơn để quyết định xem đối tượng có trùng lặp hay không. đúng? – Ankit

3

Chuỗi hồ bơi không phải là hồ bơi chỉ/bộ nhớ cache trong Java, Integer và các lớp wrapper khác sử dụng bộ nhớ cache, bạn có thể có một cái nhìn vào mã nguồn Integer là một ví dụ

public static Integer valueOf(int i) { 
    assert IntegerCache.high >= 127; 
    if (i >= IntegerCache.low && i <= IntegerCache.high) 
     return IntegerCache.cache[i + (-IntegerCache.low)]; 
    return new Integer(i); 
} 

bạn cũng có thể có một cái nhìn tại http://commons.apache.org/proper/commons-pool//

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