Tôi nghĩ có một số lý do chính đáng khiến họ quyết định không đưa nó vào API thu thập.
Tôi nghĩ rằng lý do là không ai đã đưa ra một API tốt cho loại cây đó là cả
- chung mục đích đủ để trang trải một loạt các trường hợp sử dụng, và
- hữu ích đủ để bù đắp cho chi phí hoạt động của tổng quát.
(Và nơi nào bạn dừng lại? Tree? Cây nhị phân? N-ary cây DAG? Graph?)
Điều đáng chú ý là không phải Apache Commons Bộ sưu tập hoặc Google Collections (aka Ổi) có một API cây. Tuy nhiên, có vấn đề về ổi chủ động về chủ đề này - http://code.google.com/p/guava-libraries/issues/detail?id=174 - vì vậy rõ ràng ít nhất một số người đồng ý với quan điểm của bạn.
CẬP NHẬT
Tính đến phiên bản 15.0, ổi hiện nay có hỗ trợ cây theo hình thức của TreeTraverser
và BinaryTreeTraverser
lớp. Nhưng điều này có thể không phải là những gì bạn mong đợi. Trong thực tế, các lớp này không thực sự thực hiện cấu trúc dữ liệu cây. Thay vào đó, bạn phải làm điều này trong một tham số kiểu generic. Ngoài ra, các lớp Traverser
thậm chí còn tránh giả định về các API của loại nút. Họ làm điều này bằng cách là lớp trừu tượng, và yêu cầu subtype traverser cụ thể để thực hiện các hoạt động thẩm vấn cây; ví dụ. để có được con của một nút.
FWIW, TreeMap
và TreeSet
không phải là "API cây". Chúng là các triển khai dựa trên cây của các API Map
và Set
. Cây cối được che giấu hoàn toàn bởi các API công cộng, làm cho hai lớp này hoàn toàn không phù hợp để sử dụng làm cây mục đích chung.
Nguồn
2011-12-27 07:25:10
yup, thực sự thú vị – Eugene
TreeSet và TreeMap là hai bộ sưu tập được sao lưu bởi cây nhị phân. –
Im không chỉ nói về cây nhị phân, tại sao chúng ta không có một thực hiện cây tổng quát, một cây inteface? –