tôi muốn tạo một HashSet
cho số thực (hiện nay Double
s) sử dụng một khoan dung định nghĩa (epsilon
), (cf Assert.assertEquals(double, double, double)
Kể từ khi sử dụng Double.equals()
chỉ hoạt động cho bình đẳng chính xác và Double
là một lớp học chính thức Ý tưởng ban đầu của tôi là mở rộng HashSet
(ví dụ: DoubleHashSet
), với phương thức setEpsilon(double)
và tạo một lớp mới ComparableDouble
trong đó equals()
sử dụng giá trị này từ DoubleHashSet
. Tuy nhiên, tôi muốn kiểm tra xem có các giải pháp hiện tại hay không đã có và các thư viện F/OSS hiện có.Tạo một HashSet cho đôi
(thứ hai trong tương lai, tôi sẽ muốn mở rộng điều này thành các số thực - ví dụ: hình chữ nhật và hình khối - do đó, cách tiếp cận chung là thích hợp hơn
LƯU Ý: @NPE đã đề xuất không thể. Thật không may tôi nghi ngờ đây là chính thức chính xác :-) Vì vậy, tôi tự hỏi nếu có phương pháp gần đúng ... Những người khác phải có vấn đề này và giải quyết nó khoảng. (Tôi đã thường xuyên sử dụng một công cụ Real.isEqual(a, b, epsilon)
và nó rất hữu ích.) Tôi đang chuẩn bị để chấp nhận một số lỗi không thường xuyên của transitivity.
LƯU Ý: Tôi sẽ sử dụng TreeSet để giải quyết vấn đề "gần bằng()". Sau đó tôi sẽ so sánh complexNumbers, hình chữ nhật (và các đối tượng phức tạp hơn) và nó thực sự hữu ích để có thể thiết lập một giới hạn trong đó 2 điều là bằng nhau. Không có đơn đặt hàng tự nhiên đơn giản của complexNumbers (có lẽ một cách tiếp cận Cantor sẽ làm việc), nhưng chúng ta có thể biết liệu chúng gần như bằng nhau hay không.
Bạn dường như đang đi đúng hướng ở đây. Mở rộng Double và cung cấp việc thực hiện equals của bạn có vẻ là cách tiếp cận đúng. – anubhava
@anubhava OK - Tôi sẽ thêm một số mã giả để nhận xét –
@anubhava đã xóa mã vì các câu trả lời khác thay thế cho nó –