Sức mạnh chính hãng và lợi thế của TreeSet nằm trong giao diện nó nhận ra - NavigableSet
Tại sao nó nên mạnh mẽ và trong trường hợp này?
điều hướng giao diện Set thêm ví dụ những 3 phương pháp tốt đẹp:
headSet(E toElement, boolean inclusive)
tailSet(E fromElement, boolean inclusive)
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
Những phương pháp này cho phép tổ chức giải thuật tìm kiếm hiệu quả (rất nhanh).
Ví dụ: chúng ta cần phải tìm tất cả các tên đó bắt đầu với Milla và kết thúc bằng Wladimir:
TreeSet<String> authors = new TreeSet<String>();
authors.add("Andreas Gryphius");
authors.add("Fjodor Michailowitsch Dostojewski");
authors.add("Alexander Puschkin");
authors.add("Ruslana Lyzhichko");
authors.add("Wladimir Klitschko");
authors.add("Andrij Schewtschenko");
authors.add("Wayne Gretzky");
authors.add("Johann Jakob Christoffel");
authors.add("Milla Jovovich");
authors.add("Taras Schewtschenko");
System.out.println(authors.subSet("Milla", "Wladimir"));
đầu ra:
[Milla Jovovich, Ruslana Lyzhichko, Taras Schewtschenko, Wayne Gretzky]
TreeSet không đi qua tất cả các yếu tố, nó tìm thấy elemen đầu tiên và cuối cùng và trả về một Bộ sưu tập mới với tất cả các phần tử trong phạm vi.
Tôi không muốn bắt đầu thêm câu trả lời vì một số đã được cung cấp, nhưng tôi muốn thêm một thực tế nữa: Bạn đã nói về việc thêm/xóa dữ liệu. Điều gì về việc cập nhật? Xin lưu ý thực tế là một TreeSet không bao giờ cập nhật thứ tự sắp xếp của nó nếu bạn thay đổi các đối tượng phần tử liên quan đến "khóa phân loại" của chúng. Nếu bạn muốn làm điều đó, hãy sử dụng lớp [UpdateableTreeSet] của tôi (http://stackoverflow.com/a/11169301/1082681) hoặc một cái gì đó tương tự. Nó có thể là một yếu tố quyết định nếu bạn có đối tượng với trạng thái thay đổi. – kriegaex