Ответ 1
Я думаю, что должна быть какая-то веская причина, по которой они решили не включать его в API коллекций.
Я думаю, что причина в том, что никто не придумал хороший API для деревьев, которые оба
- общая цель, достаточная для охвата широкого спектра прецедентов, и
- достаточно полезно, чтобы компенсировать накладные расходы на производительность, являющиеся общими.
(И где вы остановитесь? Дерево? Двоичное дерево? N-арное дерево? DAG? График?)
Стоит отметить, что ни коллекции Apache Commons, ни коллекции Google (aka Guava) не имеют API дерева. Тем не менее, есть активная проблема Guava по этой теме - http://code.google.com/p/guava-libraries/issues/detail?id=174 - так ясно, по крайней мере, некоторые люди согласны с вашей точкой зрения.
UPDATE
Начиная с версии 15.0, у Guava теперь есть поддержка дерева в виде классов TreeTraverser
и BinaryTreeTraverser
. Но это может быть не то, что вы ожидаете. По правде говоря, эти классы фактически не реализуют структуру данных дерева. Вместо этого вы должны сделать это в параметре общего типа. Кроме того, классы Traverser
даже избегают делать предположения о API-интерфейсах типа node. Они делают это, будучи абстрактными классами, и требуют, чтобы подтип конкретного traverser реализовал операции, которые опросили дерево; например для получения node детей.
FWIW, TreeMap
и TreeSet
не являются "древовидными API". Это древовидные реализации API Map
и Set
. Публикация полностью скрыта публичными API-интерфейсами, что делает эти два класса совершенно непригодными для использования в качестве деревьев общего назначения.