2012-07-10 10 views
8

Giả sử bạn muốn thực hiện các khái niệm lý thuyết tập hợp như element, set, collectionrelation trong Java: Làm thế nào bạn sẽ đại diện cho tập rỗng?Cách triển khai bộ trống - ∅?

Tôi có đánh lừa bản thân mình không, nếu tôi nghĩ về khái niệm NULL vì nó được sử dụng bởi logic ba giá trị của cơ sở dữ liệu?

+4

Tôi không chắc chắn có câu trả lời duy nhất cho câu hỏi này; nó phụ thuộc vào những gì bạn muốn đạt được. Câu trả lời rõ ràng là "sử dụng một' Set' trống rỗng, nhưng 'NULL' cũng có thể thích hợp tùy thuộc vào những gì bạn đang làm. –

+4

Có vô số cách để biểu diễn bộ trống, tùy thuộc vào ứng dụng dự định. 'Đặt = new HashSet ()' là một trong những đơn giản nhất. –

+4

Collections.emptySet() nói đến cái tâm ... –

Trả lời

27

Sử dụng Collections.emptySet():

Trả về tập rỗng (không thay đổi). Bộ này có thể được tuần tự hóa. Không giống như trường tương tự, phương thức này được tham số hóa. Đây dụ minh họa cách kiểu an để có được một tập rỗng:

Set<String> s = Collections.emptySet(); 

lưu ý thực hiện: Triển khai các phương pháp này không cần phải tạo ra một đối tượng riêng biệt Set cho mỗi cuộc gọi. Sử dụng phương pháp này có thể có chi phí tương đương với bằng cách sử dụng trường có tên tương tự. (Khác với phương pháp này, lĩnh vực này không cung cấp loại an toàn.)

+0

Cảm ơn bạn đã đề xuất. Tôi sẽ sử dụng lời khuyên của bạn. – M4TT4CK

8

Sử dụng null để đại diện cho một tập rỗng là một ý tưởng xấu. Một null không hoạt động như một Set bởi vì (rõ ràng) tất cả các nỗ lực để thực hiện một hoạt động trên nó sẽ ném một NullPointerException. Điều đó có nghĩa rằng nếu bạn sử dụng null để biểu thị một tập hợp trống, mã của bạn sẽ được rải rác với các bài kiểm tra cho null ... và nếu bạn bỏ lỡ một, bạn đã có một lỗi.

Giải pháp là sử dụng Collections.emptySet() nếu bạn muốn một bộ trống không thay đổi hoặc tạo một thể hiện của lớp Set thích hợp nếu bạn muốn một bộ có thể thay đổi bắt đầu trống.

+0

+1 cho biết lý do tại sao null là một ý tưởng tồi. –